页面加载 rendered/all 个组件时的事件

Event when page is rendered/all components are loaded

我有一个由子组件组成的 Qml 组件。加载(渲染)所有内容后,我想执行一些操作。 有没有办法找出所有组件何时加载?仅在根元素上使用 Component.onCompleted 事件是不够的,因为不能保证加载子元素。

此致,

您应该可以使用 QQuickWindowafterSynchronizing() 信号来实现此目的:

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".

缺点:

  • 有一点开销。如果组件经常在低级别构建(如按钮),则可能值得进行分析以查看它是否对性能有负面影响。如果不是,则可以忽略不计。