簡體   English   中英

如何從 QML 連接被破壞的 C++ 對象信號?

[英]How to connect a destroyed signal of C++ object from QML?

我想從 QML 連接一個被破壞的 C++ QObject信號,所以我這樣做了:

Rectangle
{
    id: root
    width: 128
    height: 128

Button
{
    anchors.centerIn: parent
    text: "Click me"
    onClicked:
    {
        qobj.Component.onDestruction.connect(function(){console.log("It destroy")}) // qobj is set from c++
        qobj.destroy() // should output "It destroy"
    }
}

但是當我銷毀qobj時沒有打印任何qobj

在一般情況下,您可以使用Connections元素連接到從 C++ 對象發出的信號:

Connections {
    target: yourObjectComingFromCpp
    onSomeSignal: console.log("Something")
}

或者在 Javascript 中通過在 JS 映射對象的相應屬性上調用connect函數:

// without the *on*!
yourObjectComingFromCpp.someSignal.connect( /* JS function here */ );

但是:這不適用於特定的QObject::destroyed信號,這些信號被強行列入黑名單並且在 QML 中永遠不可用( source )。

我想原因是該對象無論如何都從 QML 上下文中消失了,而且當發出該信號時,您會深入到 QObject 自己的析構函數中,這意味着您的子類上的任何屬性或方法訪問此時都是無效的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM