簡體   English   中英

如何從成員QThread更改QMainWindow上的Qt GUI小部件?

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

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