Запретить появление окна QML до того, как будет доступно все содержимое QML
Как запретить отображение окна QML до тех пор, пока не будет доступно все содержимое QML?
В моем примере ниже показано пустое окно после
QQmlApplicationEngine
создается, но содержимое QML не появляется до тех пор, пока
app.exec_()
называется. Эффект усиливается из-за
time.sleep(1)
в моем примере кода. Окно белое, а через секунду оно показывает красный фон.
Что мне нужно сделать, чтобы все содержимое QML отображалось при появлении окна? Или, скорее, как мне предотвратить отображение окна, пока все содержимое QML не будет готово?
QML
import QtQuick
import QtQuick.Controls
ApplicationWindow {
color: "red"
visible: true
}
Код
import time
from PySide6 import QtQml, QtWidgets
app = QtWidgets.QApplication([])
engine = QtQml.QQmlApplicationEngine("app_window.qml")
# This sleep exaggerates the issue so that you can easily observe
# that an empty window is shown by this point without QML content.
# Without the sleep the empty window looks like a white "flash"
# before the QML content is shown. I want to get rid of this "flash",
# so I don't want the empty window to ever be visible!
time.sleep(1)
app.exec_()
Я работаю в Windows.
1 ответ
Виджеты и QML - два разных зверя в стране Qt.
Обычно вы никогда не должны смешивать два в одном проекте. Подробнее о различиях и концепциях читайте в другом месте.
Класс QApplication - это способ создания экземпляра приложения Qt Widgets. Ссылаясь на документы:
QApplication специализируется на QGuiApplication с некоторыми функциями, необходимыми для приложений на основе QWidget. Он обрабатывает специфическую инициализацию виджета, финализацию.
Для приложений QML вы используете простые экземпляры QGuiApplication и QQmlEngine . Важно понимать, что приложение Qt управляет своим жизненным циклом и циклом событий, в то время как движок Qml подобен еще одному движку сценариев поверх цикла событий приложения.
В экосистеме Qt много движущихся частей. Я обобщил свои выводы на одной большой диаграмме XMind в моем блоге Telegram . Проверить это отрендерено.