我有一个由子组件组成的Qml组件。加载(渲染)所有内容后,我想执行一些操作。有没有办法找出所有组件何时加载?仅仅在根元素上使用Component.onCompleted
事件是不够的,因为不能保证加载子元素。
问候,
您应该能够使用QQuickWindow
的afterSynchronizing()
信号来实现这一点:
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
ApplicationWindow {
visible: true
width: 1280
height: 700
property bool initialised: false
onAfterSynchronizing: {
if (!initialised) {
print("initialising...");
// stuff...
initialised = true;
}
}
}
优点:
- 你可以免费得到它
缺点:
- 您只能在
QQuickWindow
衍生物上使用它
一种替代方案是使用Loader
;特别是其loaded()
信号:
Loader {
source: "MyComponent.qml"
onLoaded: {
// stuff...
}
}
优点:
- 对于任何可能需要维护代码的人来说,这是一个更清晰的选择
- 在没有
Window
的情况下工作;可以在场景的"层次"中的任何级别使用它
缺点:
- 带有一点头顶。如果组件经常在低级别(如按钮)构建,则可能值得分析它是否会对性能产生负面影响。如果没有,它是微不足道的