无法在一个插槽中两次更改 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
// ...
还要注意 qApp
是 QApplication::instance()
的缩写。包括 <QApplication>
以便能够使用它。
更新:QtConcurrent
和 QThread
东西
但是就像@Mat 的评论和参考答案中所说的那样......这可能是真正应该在 QThread
或 QFuture
或其他一些 QtConcurrent
class。线程同步和相关主题有一个学习曲线,所以在开始时要小心,如果你以前没有做过的话。
我喜欢这里的制作方式:http://qt-project.org/wiki/Progress-bar
希望对您有所帮助。
我在以下函数中连续两次更新 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
// ...
还要注意 qApp
是 QApplication::instance()
的缩写。包括 <QApplication>
以便能够使用它。
更新:QtConcurrent
和 QThread
东西
但是就像@Mat 的评论和参考答案中所说的那样......这可能是真正应该在 QThread
或 QFuture
或其他一些 QtConcurrent
class。线程同步和相关主题有一个学习曲线,所以在开始时要小心,如果你以前没有做过的话。
我喜欢这里的制作方式:http://qt-project.org/wiki/Progress-bar
希望对您有所帮助。