【问题标题】:Event when page is rendered/all components are loaded渲染页面/加载所有组件时的事件
【发布时间】:2015-11-08 07:30:12
【问题描述】:

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

问候,

【问题讨论】:

    标签: qt qml qt5 qtquick2


    【解决方案1】:

    您应该可以使用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 即可工作;可以在场景“层次结构”中的任何级别使用它。

    缺点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      相关资源
      最近更新 更多