页面加载 rendered/all 个组件时的事件
Event when page is rendered/all components are loaded
我有一个由子组件组成的 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
; specifically its loaded()
信号:
Loader {
source: "MyComponent.qml"
onLoaded: {
// stuff...
}
}
优点:
- 对于可能必须维护您的代码的任何人来说,这是一个更清晰的替代方案。
- 没有
Window
也能工作;可以在场景的任何级别使用它 "hierarchy".
缺点:
- 有一点开销。如果组件经常在低级别构建(如按钮),则可能值得进行分析以查看它是否对性能有负面影响。如果不是,则可以忽略不计。
我有一个由子组件组成的 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
; specifically its loaded()
信号:
Loader {
source: "MyComponent.qml"
onLoaded: {
// stuff...
}
}
优点:
- 对于可能必须维护您的代码的任何人来说,这是一个更清晰的替代方案。
- 没有
Window
也能工作;可以在场景的任何级别使用它 "hierarchy".
缺点:
- 有一点开销。如果组件经常在低级别构建(如按钮),则可能值得进行分析以查看它是否对性能有负面影响。如果不是,则可以忽略不计。