[英]Multiple Threads, how to create qt widgets properly
我有以下星座:
一個Qt gui線程與MainWindow
另一個基本上是CameraManager
線程...每次添加/刪除攝像機時,都會通知MainWindow
。
大致如下所示:
主窗口源自ICameraAddedConsumer
MainWindow
實現ConsumeCameraAdded
並在此函數內創建小部件。 它將itselv作為消費者訂閱CameraManager
添加新相機時,CameraManager會調用ConsumeCameraAdded
所有使用者( MainWindow
)中的ConsumeCameraAdded
。
問題在於CameraManager駐留在不同的線程中,並且Qt顯然會對此抱怨,因為未在與主窗口相同的線程中創建窗口小部件。
有什么建議可以解決這個問題嗎?
根據評論,在不同線程中的QObject之間使用信號/插槽應“自動”解決該問題。
除非假定MainWindow/ICameraAddedConsumer
是QObject
,否則一個想法可能是使用類似以下內容的方法:
QMetaObject::invokeMethod(consumer, "ConsumeCameraAdded", Qt::QueuedConnection, ...)
consumer
是指向MainWindow/ICameraAddedConsumer
實例的指針。
有QWaitCondition
但我不確定在這種情況下是否有意義(盡管我想可以進行調整)。
否則...不要在ConsumeCameraAdded()
創建窗口小部件,而是在ConsumeCameraAdded()
設置一些標志(並返回),然后使用QTimer
或QObject::timerEvent()
定期檢查標志並創建窗口小部件(如果已設置)。 不幸的是,由於線程問題,我非常確定您將無法在ConsumeCameraAdded()
自身中創建或啟動計時器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.