![](/img/trans.png)
[英]QT C++ How to return QImage from QThread and display it on QLabel in QMainWindow?
[英]How can I change Qt GUI widgets on a QMainWindow from a QThread which is a member?
我的主要表單是Qt Designer,並繼承自QMainWindow
和UI。 我需要運行其他線程,並且需要那些線程來更改主窗體上的內容,例如進度條,LCD。
如何讓其他線程訪問主窗體上的小部件?
謝謝你的幫助。
使用信號/插槽。 Trolltech從4.xa引入了線程安全機制,用於使用例如connect()函數中的Qt :: BlockingQueuedConnection參數進行信號傳遞。
有關更多詳細信息,請參見: http : //lists.trolltech.com/qt-interest/2007-03/thread00260-0.html
正如Flavius Suciu所提到的,您可以使用跨線程信號/插槽連接。 它們也可以帶有參數,但是,如果您不只是傳遞基本類型或Qt類型作為信號參數,而是說您自己的自定義struct
,則需要通過以下方式將它們告知Qt:
namespace MyNamespace { // if any...
struct MyClass { /* ... */ };
} // if any
Q_DECLARE_METATYPE( MyNamespace::MyClass )
這允許將MyClass
填充到QVariant
,這是Qt在內部使用它在線程邊界上傳遞信號參數的副本的方法。
您可能還需要打電話
qRegisterMetaType<MyNamespace::MyClass>();
一定要在嘗試任何信號/插槽跨線程連接之前執行它(例如,在main()
或QThread
子類構造函數中)。
請參閱Q_DECLARE_METATYPE的文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.