簡體   English   中英

來自QML的Qt :: QueuedConnection

[英]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.

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