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

Hyn*_*rix 6 qt qml qt5 qtquick2

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

问候,

Mit*_*tch 5

您应该能够使用 的afterSynchronizing()信号QQuickWindow来实现此目的:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

优点:

  • 您可以免费获得它。

缺点:

  • 您只能在QQuickWindow衍生品上使用它。

另一种方法是使用Loader; 具体来说它的loaded()信号:

Loader {
    source: "MyComponent.qml"
    onLoaded: {
        // stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

优点:

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

缺点:

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