簡體   English   中英

如何為QWidget繼承的類創建一個線程?

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

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