[英]Qt::QueuedConnection from QML
我有C ++類發射信號和QML插槽。 我需要在程序返回事件循環后在同一個線程中執行slot。
我怎樣才能實現這樣的目標?
Connections {
target: box2dCppEngine
onBulletCollided: box2dCppEngine.deleteObject(bullet)
connectionType: Qt.QueuedConnection
}
我需要這個,因為我無法執行deleteObject,在處理碰撞時,我需要在世界步驟之后執行此操作。
我不知道QML有多少,但我可以提供不同的方法:看看QObject :: deleteLater()
當控制返回到事件循環時,將刪除該對象。
由於它是一個插槽,您可以將信號直接連接到bullet.deleteLater()
,或者在deleteObject
插槽中調用deleteLater
。
遺憾的是,Connections組件中沒有connectionType屬性。 但一個簡單的解決方法是重新啟動oneshot定時器,而不是直接在Connections signalHandler中調用該方法。
例如
Connections {
target: box2dCppEngine
onBulletCollided: timerHelper.restart()
}
Timer {
id: timerHelper
interval: 1
onTriggered: box2dCppEngine.deleteObject(bullet)
}
但正如Tim Meyer指出的那樣,在你的情況下,使用deleteLater()可能更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.