簡體   English   中英

多線程,如何正確創建qt小部件

[英]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/ICameraAddedConsumerQObject ,否則一個想法可能是使用類似以下內容的方法:

QMetaObject::invokeMethod(consumer, "ConsumeCameraAdded", Qt::QueuedConnection, ...)

consumer是指向MainWindow/ICameraAddedConsumer實例的指針。

QWaitCondition但我不確定在這種情況下是否有意義(盡管我想可以進行調整)。

否則...不要在ConsumeCameraAdded()創建窗口小部件,而是在ConsumeCameraAdded()設置一些標志(並返回),然后使用QTimerQObject::timerEvent()定期檢查標志並創建窗口小部件(如果已設置)。 不幸的是,由於線程問題,我非常確定您將無法在ConsumeCameraAdded()自身中創建或啟動計時器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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