Предотвратить мерцание при загрузке QQuickView

У меня есть QStackedLayout с двумя QWidget объекты добавлены к нему. второй QWidget создается так:

QQuickView *view = new QQuickView();
view->setColor(Qt::transparent);
view->setSource(QUrl("qrc:/main.qml"));
m_qmlWidget = QWidget::createWindowContainer(view, this); // this is a QWidget object

Теперь я хочу иметь возможность показывать и скрывать второй (верхний) виджет. Я делаю это по телефону m_qmlWidget->setVisible(false); или же m_qmlWidget->setVisible(true); но всякий раз, когда я делаю это, виджет окрашивается полностью пустым (белого цвета) и вскоре после этого меняет фон на прозрачный цвет. Это проблема для меня, потому что первый виджет будет в основном черным. Я думаю, что причина проблемы в том, что файл QML загружается и блокирует событие перерисовки. Два решения, которые приходят мне в голову:

  • загрузить файл QML асинхронно
  • не выгружайте второй виджет, когда он не виден

Я боюсь, что оба эти варианта невозможно сделать. Как можно решить проблему с мерцающим белым фоном?

Мерцание происходит, когда я меняю visible второго QWidget на истину или ложь. Я не понимаю, почему мерцание происходит при скрытии верхнего виджета.


Здесь вы можете найти рабочий пример проекта. Может быть QOpenGLWidget Объект является проблемой здесь. Создание двух виджетов, похоже, не создавало проблемы.

0 ответов

Другие вопросы по тегам