2013-02-19 41 views
0

我想重新實現創建我自己的QThread類的運行函數。ui是受保護的,但如何在重新實現的Qthread run()函數中使用它

我創造了這個,

class MyThread : public QThread 
{ 
public: 
    void run(); 
}; 

void MyThread::run() 
{ 
    gui w; 
    w.listen_device(w.ui->comboBox->currentIndex()); 
    exec(); 
} 

所以我給的值作爲參數傳遞給我的listen_device功能無法使用Q漆主線程之外。

我知道ui來自gui是受保護的,所以我怎樣才能得到這個值?

謝謝。

+1

它不僅僅是不能在後臺線程中繪製的。 QWidgets根本無法在後臺線程中創建。如果你的小部件是在'gui'的構造函數中創建的,那麼你需要重新考慮你的設計。只保留後臺線程中的邏輯併發出信號。在主線程中,您可以捕獲這些信號並更新視圖。 – cgmb 2013-02-19 21:13:20

回答

1

創建gui類的公共方法,該方法將返回ui->comboBox->currentIndex();

public: 
    int gui::getCurrentIndex() // or whatever 
    { 
    return ui->comboBox->currentIndex(); 
    } 

不要繼承QThread,使用上QObjectmoveToThread()代替。

相關問題