我在较旧的 GPU 上运行 QML 应用程序时遇到问题。 因此,我需要优化 QML 屏幕的结构,这些屏幕预计将通过 StackView 动态加载。然而,有些屏幕加载时间超过 350ms,这在视觉上是不可接受的。
最初,我想通过在一些 QML 组件上使用
Loader
并在必要时加载/显示它们来优化屏幕。
问题是,在屏幕内,有管理业务逻辑的 C++ 后端,在 QML 中声明,它们与我想要放入加载器的项目有许多绑定。
因此,我必须保留项目原样,并根据需要显示/隐藏它们。因此,所有内容都必须在屏幕加载时加载,这会增加加载时间。 我想知道如何有效地优化我继承的这个系统。
这是一个代码片段:
Item {
BackendCpp {
workingProp1: cppContext.prop1
workingProp2: item1.prop
workingProp3: item2.prop
}
BigQmlItem {
id: item1
visible: cppContext.condition === true
}
AnotherBigQmlItem {
id: item2
visible: cppContext.condition === false
}
}
拥有 C++ 后端、管理业务逻辑和拥有多个绑定没有任何问题。
查看延迟加载策略。在 QML 中,使用
Qt.callLater()
和 Timer
推迟初始化或将大型初始化逻辑分解为较小的部分。在 C++ 中,查看 QTimer:singleShot
和 QThread
来延迟主线程中的执行或将活动移出主线程。
信号/槽是您的朋友,可帮助将数据从另一个线程编组回 UI 线程。
查看 C++ 和 QML 中的
models
。确定模型是否可以从空开始并逐渐填充。如果您的数据绑定良好,它应该尊重您缓慢填充的模型并抵抗初始化顺序。