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

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

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

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

【问题讨论】:

标签: qt


【解决方案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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2012-02-11
    • 2015-07-20
    • 2021-09-08
    • 2021-10-20
    • 2016-02-23
    相关资源
    最近更新 更多