呈现页面/加载所有组件时的事件

时间:2015-11-08 07:30:13

标签: qt qml qt5 qtquick2

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

此致

1 个答案:

答案 0 :(得分:3)

您应该可以使用QQuickWindow的{​​{3}}信号来实现此目的:

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衍生产品上使用它。

另一种方法是使用afterSynchronizing();特别是它的Loader信号:

Loader {
    source: "MyComponent.qml"
    onLoaded: {
        // stuff...
    }
}

优点:

  • 对于可能需要维护代码的任何人来说,这是一个更清晰的替代方案。
  • 没有Window的作品;可以在场景的“层次结构”中的任何级别使用它。

缺点:

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