【问题标题】:Catch QML Component status/progress change signals捕捉 QML 组件状态/进度变化信号
【发布时间】:2026-01-13 08:55:01
【问题描述】:

我正在尝试调试我的 QML 应用程序,该应用程序在加载时遇到冻结。我没有从我的任何组件中收到 Component.onCompleted 信号,因此我正在尝试检查 Component.status 更改,但是当我尝试使用以下示例时,QML 会引发Cannot assign to non-existent property "onStatusChanged" 警告。如何获得组件状态或进度更改的通知?

import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 2.14
import QtWebEngine 1.10
import QtWebChannel 1.0


ApplicationWindow {
    width: 600
    height: 480
    visible: true

        WebEngineView {
            anchors.fill: parent
            url: "https://www.xkcd.com"
        }

    Component.onCompleted: print("Completed")
    Component.onStatusChanged: print("Status changed: ", status)
    Component.onProgressChanged: print("Progress changed: ", progress)
}

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    您无法从那里访问Component 属性,例如status。您只能访问 onCompleted 信号,因为它是“附加信号”。我会使用Loader 来跟踪进度。试试这样:

    Loader {
        asynchronous: true
    
        sourceComponent: WebEngineView {
            anchors.fill: parent
            url: "https://www.xkcd.com"
        }
    
        onProgressChanged: {
            console.log("progress: " + progress)
        }
    }
    

    【讨论】: