Как подключить разрушенный сигнал объекта C++ из QML?
Я хочу подключить разрушенный сигнал C++ QObject
из QML, поэтому я сделал это:
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
,
1 ответ
В общем случае вы можете подключиться к сигналам, исходящим от объекта C++, используя элемент Connections:
Connections {
target: yourObjectComingFromCpp
onSomeSignal: console.log("Something")
}
или в Javascript, вызвав connect
функция на соответствующем свойстве сопоставленного JS-объекта:
// without the *on*!
yourObjectComingFromCpp.someSignal.connect( /* JS function here */ );
Тем не менее: это не работает для конкретного QObject::destroyed
сигналы, которые принудительно помещаются в черный список и никогда не доступны в QML ( источник).
Я предполагаю, что причина в том, что объект в любом случае ушел из контекста QML в тот момент, плюс, когда этот сигнал испускается, вы глубоко погружаетесь в собственный деструктор QObject, что означает, что любой доступ к свойству или методу вашего подкласса в этот момент недопустим.