渲染页面/加载所有组件时的事件

Posted

技术标签:

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

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

问候,

【问题讨论】:

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

缺点:

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

【讨论】:

以上是关于渲染页面/加载所有组件时的事件的主要内容,如果未能解决你的问题,请参考以下文章

vue 图片加载完成事件

下拉框渲染大量数据时的解决方案

下拉框渲染大量数据时的解决方案

下拉框渲染大量数据时的解决方案

嵌套反应路由器组件不会在页面重新加载时加载/渲染?

EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图