在所有 QML 内容可用之前阻止 QML window 出现
Prevent QML window from appearing before all the QML content is available
如何防止我的 QML window 在所有 QML 内容可用之前显示?
在我下面的示例中,在创建 QQmlApplicationEngine
之后会显示一个空的 window,但是在调用 app.exec_()
之前不会显示 QML 内容。我的示例代码中的 time.sleep(1)
夸大了效果。 window 为白色,一秒钟后显示红色背景。
我需要做什么才能在 window 出现时显示所有 QML 内容?或者更确切地说,如何防止 window 在所有 QML 内容准备就绪之前显示?
我 运行 Windows。
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_()
这是我看到的慢动作记录,以 1/8 速度播放,没有 time.sleep()
。请注意 window 最初显示时是白色的,然后变为红色(好吧,我的 phone 使其变为橙色)。我希望 window 从可见的第一刻起就变成红色。
Widgets 和 QML 是 Qt 领域中两个截然不同的野兽。
通常情况下,您不应该将两者混合在一个项目中。在别处阅读更多关于差异和概念的信息。
QApplication Class 是实例化 Qt Widgets 应用程序的方法。引用文档:
QApplication specializes QGuiApplication with some functionality needed for QWidget-based applications. It handles widget specific initialization, finalization.
对于 QML 应用程序,您可以使用裸 QGuiApplication and a QQmlEngine 个实例。重要的是要认识到 Qt 应用程序管理它的生命周期和事件循环,而 Qml 引擎就像应用程序事件循环之上的另一个脚本引擎。
Qt 生态系统中有许多活动部件。我在我的 Telegram blog 中用一张 XMind 大图总结了我的发现。检查渲染。
如何防止我的 QML window 在所有 QML 内容可用之前显示?
在我下面的示例中,在创建 QQmlApplicationEngine
之后会显示一个空的 window,但是在调用 app.exec_()
之前不会显示 QML 内容。我的示例代码中的 time.sleep(1)
夸大了效果。 window 为白色,一秒钟后显示红色背景。
我需要做什么才能在 window 出现时显示所有 QML 内容?或者更确切地说,如何防止 window 在所有 QML 内容准备就绪之前显示?
我 运行 Windows。
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_()
这是我看到的慢动作记录,以 1/8 速度播放,没有 time.sleep()
。请注意 window 最初显示时是白色的,然后变为红色(好吧,我的 phone 使其变为橙色)。我希望 window 从可见的第一刻起就变成红色。
Widgets 和 QML 是 Qt 领域中两个截然不同的野兽。
通常情况下,您不应该将两者混合在一个项目中。在别处阅读更多关于差异和概念的信息。
QApplication Class 是实例化 Qt Widgets 应用程序的方法。引用文档:
QApplication specializes QGuiApplication with some functionality needed for QWidget-based applications. It handles widget specific initialization, finalization.
对于 QML 应用程序,您可以使用裸 QGuiApplication and a QQmlEngine 个实例。重要的是要认识到 Qt 应用程序管理它的生命周期和事件循环,而 Qml 引擎就像应用程序事件循环之上的另一个脚本引擎。
Qt 生态系统中有许多活动部件。我在我的 Telegram blog 中用一张 XMind 大图总结了我的发现。检查渲染。