2015-01-11 57 views
1

我有一個問題,在下面的函數連續兩次更新QLabel文本:無法更改QLabel文字兩次插槽

void MainWindow::on_button_clicked(){ 
    ui->label->setText("Training"); 
    object->training(); 
    ui->label->setText("Training finished"); 
} 

setText()第一個電話永遠不會改變標籤的文本。這個例子有什麼問題?

+1

另請參閱:http://stackoverflow.com/questions/1386043/how-to-make-qt-work-when-main-thread-is-busy – Mat

回答

3

此插槽調用正在GUI線程上運行。當你到達函數的末尾時,GUI是否有機會做更新。

你可以強制與更新:

ui->label->update(); // queues up an update event 
qApp->processEvents(); // processes the update event 

// start some longer code snippet 
// ... 

而且還要注意qApp是短期的QApplication::instance()。包括<QApplication>以便能夠使用它。

UPDATE:QtConcurrentQThread東西

但是,像它在@墊的評論和參考答案說......這可能是繃帶的東西,真的應該在QThread或用QFuture或其他一些推出的解決方案QtConcurrent類。線程同步和相關主題有一條學習曲線,所以在開始時請小心,如果以前沒有這樣做的話。

我喜歡它是如何在這裏完成:http://qt-project.org/wiki/Progress-bar

希望有所幫助。