不能在一个槽中两次更改 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
// ...
还要注意qApp
是QApplication::instance()
的缩写。包含<QApplication>
以便能够使用它。
更新:QtConcurrent
和 QThread
的东西
但是就像它在@Mat 的评论和参考答案中所说的那样......这可能是真正应该在QThread
或QFuture
或其他QtConcurrent
类中启动的东西的创可贴解决方案。线程同步和相关主题有一个学习曲线,所以如果你以前没有这样做过,在开始时要小心。
我喜欢这里的做法:http://qt-project.org/wiki/Progress-bar
希望对您有所帮助。
【讨论】:
以上是关于不能在一个槽中两次更改 QLabel 文本的主要内容,如果未能解决你的问题,请参考以下文章