我有C ++类发射信号和QML插槽。我需要在程序返回事件循环后在同一个线程中执行slot。
我怎样才能达到这样的目标?
Connections {
target: box2dCppEngine
onBulletCollided: box2dCppEngine.deleteObject(bullet)
connectionType: Qt.QueuedConnection
}
我需要这个,因为我无法执行deleteObject,在处理碰撞时,我需要在世界步骤之后执行此操作。
答案 0 :(得分:2)
我不知道QML有多少,但我可以提供不同的方法: 看看QObject::deleteLater()
当控件返回事件循环时,对象将被删除。
由于它是一个广告位,您可以将信号直接与bullet.deleteLater()
相关联,也可以在deleteLater
广告位内拨打deleteObject
。
答案 1 :(得分:2)
不幸的是,Connections组件中没有connectionType属性。但一个简单的解决方法是重新启动oneshot定时器,而不是直接在Connections signalHandler中调用该方法。
例如
Connections {
target: box2dCppEngine
onBulletCollided: timerHelper.restart()
}
Timer {
id: timerHelper
interval: 1
onTriggered: box2dCppEngine.deleteObject(bullet)
}
但正如Tim Meyer指出的那样,在你的情况下,使用deleteLater()可能会更容易。