不能在一个槽中两次更改 QLabel 文本

Posted

技术标签:

【中文标题】不能在一个槽中两次更改 QLabel 文本【英文标题】:Can't change QLabel text twice in a slot 【发布时间】:2015-01-11 06:42:01 【问题描述】:

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

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

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

【问题讨论】:

另见:***.com/questions/1386043/… 【参考方案1】:

此插槽调用正在 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

希望对您有所帮助。

【讨论】:

以上是关于不能在一个槽中两次更改 QLabel 文本的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 上使用看门狗更改 QLabel 文本

动态更改文本 qlabel

为啥gui线程在槽中调用QLabel控件的setText方法响应慢?

retranslateUi() 清除 QLabel 文本

Kivy 标签文本未更新 - 仅在方法的最后一次更改时更新

Python PyQt5:如果 QLineEdit 为空,如何更改 QLabel 的颜色?