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

Can't change QLabel text twice in a slot

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

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

setText() 的第一次调用永远不会更改标签的文本。这个例子有什么问题?

此插槽调用在 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 class。线程同步和相关主题有一个学习曲线,所以在开始时要小心,如果你以前没有做过的话。

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

希望对您有所帮助。