[英]How to declare a QWidget as object of an inherited class on QT Creator?
[英]how to create a thread for the class which is inherited by QWidget?
我想為一個由QWidget繼承的類創建一個線程。 實際上,我嘗試使用QThread進行多重繼承,但它失敗了,我想使用線程運行特定的成員函數。 我怎樣才能做到這一點? 有人有什么主意嗎?
您可以使用實現線程的包裝類並調用窗口小部件的方法:
class MyWidget : public QWidget
{
[...]
void threadMethod();
};
class MyThread : public QThread
{
[...]
MyThread( MyWidget* widget )
: mWidget(widget)
{
}
void run()
{
mWidget->threadMethod();
}
MyWidget* mWidget;
};
但是,您不應該在“threadMethod”中調用任何QWidget方法,因為GUI和小部件屬於“主”線程,而QWidget方法不是線程安全的!
最好將小部件和線程代碼完全分開。
一種解決方案可能是使用嵌套類,在該類中,您將從嵌套的run方法傳遞指向普通窗口小部件類的指針以及所需的所有方法。
屬於GUI模塊的Qt類不可重入。 它們必須從主線程運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.