我在以下函数中连续两次更新QLabel
文本时遇到问题:
void MainWindow::on_button_clicked(){
ui->label->setText("Training");
object->training();
ui->label->setText("Training finished");
}
setText()
的第一个电话永远不会更改标签的文字。这个例子有什么问题?
答案 0 :(得分: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>
以便能够使用它。
更新:QtConcurrent
和QThread
内容
但是就像在@Mat的评论和引用的答案中所说的那样......这可能是一个真正应该在QThread
或QFuture
或某些内容中推出的内容的最佳解决方案其他QtConcurrent
课程。线程同步和相关主题有一个学习曲线,所以在启动它时要小心,如果你以前没有这样做过。
我喜欢这里的工作方式:http://qt-project.org/wiki/Progress-bar
希望有所帮助。