无法在插槽中更改QLabel文本两次

时间:2015-01-11 06:42:01

标签: qt

我在以下函数中连续两次更新QLabel文本时遇到问题:

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

setText()的第一个电话永远不会更改标签的文字。这个例子有什么问题?

1 个答案:

答案 0 :(得分:3)

此插槽调用正在GUI线程上运行。当你到达函数的末尾时,就是GUI有机会进行更新。

您可以使用以下命令强制进行更新:

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

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

另请注意,qAppQApplication::instance()的缩写。包括<QApplication>以便能够使用它。

更新:QtConcurrentQThread内容

但是就像在@Mat的评论和引用的答案中所说的那样......这可能是一个真正应该在QThreadQFuture或某些内容中推出的内容的最佳解决方案其他QtConcurrent课程。线程同步和相关主题有一个学习曲线,所以在启动它时要小心,如果你以前没有这样做过。

我喜欢这里的工作方式:http://qt-project.org/wiki/Progress-bar

希望有所帮助。