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



我有一个由子组件组成的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;特别是其loaded()信号:

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

优点:

  • 对于任何可能需要维护代码的人来说,这是一个更清晰的选择
  • 在没有Window的情况下工作;可以在场景的"层次"中的任何级别使用它

缺点:

  • 带有一点头顶。如果组件经常在低级别(如按钮)构建,则可能值得分析它是否会对性能产生负面影响。如果没有,它是微不足道的

相关内容

  • 没有找到相关文章

最新更新