Qt::来自QML的QueuedConnection 我有C++类发射信号和QML时隙。在程序返回到事件循环后,我需要在同一线程中执行slot
我怎样才能做到这一点Qt::来自QML的QueuedConnection 我有C++类发射信号和QML时隙。在程序返回到事件循环后,我需要在同一线程中执行slot,c++,qt,qml,C++,Qt,Qml,我怎样才能做到这一点 Connections { target: box2dCppEngine onBulletCollided: box2dCppEngine.deleteObject(bullet) connectionType: Qt.QueuedConnection } 我之所以需要它,是因为我无法执行deleteObject,在处理碰撞时,我需要在world步骤之后执行此操作。我不知道QML有多少功能,但我可以提供一种不同的方法: 看看 当控件返回到事件循环时
Connections {
target: box2dCppEngine
onBulletCollided: box2dCppEngine.deleteObject(bullet)
connectionType: Qt.QueuedConnection
}
我之所以需要它,是因为我无法执行deleteObject,在处理碰撞时,我需要在world步骤之后执行此操作。我不知道QML有多少功能,但我可以提供一种不同的方法: 看看 当控件返回到事件循环时,对象将被删除
由于它是一个插槽,您可以将信号直接连接到
bullet.deleteLater()
,或者在deleteObject
插槽中调用deleteLater
。不幸的是,Connections组件中没有connectionType属性。但一个简单的解决方法是重新启动一个一次性计时器,而不是直接在Connections signalHandler中调用该方法
比如说
Connections {
target: box2dCppEngine
onBulletCollided: timerHelper.restart()
}
Timer {
id: timerHelper
interval: 1
onTriggered: box2dCppEngine.deleteObject(bullet)
}
但正如Tim Meyer所指出的,在您的情况下,使用deleteLater()可能更容易。看起来不错,但这迫使我将所有对象都派生自QObject,这是我不喜欢的。是的,使用此解决方案,您可能会有此限制