=============================================== ======
QProgressBar* pbar = new QProgressBar(this);
pbar->setMinimum(0);
pbar->setMaximum(0);
pbar->show();
for (int i = 0; i < 10000; i++) {
qDebug() << "=====flag1======";
}
pbar->close();
=============================================== ============
我想让ProgressBar在qDebug()消息时显示忙,但是没有效果,QProgressBar被阻塞并在循环结束时关闭。
有谁知道如何解决这个问题?谢谢!
答案 0 :(得分:2)
是GUI被阻止,因为10 000这是很多时间。 使用QThread http://doc.qt.io/qt-4.8/qthread.html。
void My_Thread::run() {
for (int i = 0; i < 1e4; i++) {
if (i % 100 == 0) {
emit UpdateProgressBar(i);
}
}
}
//In Your SLOT
void MainWindow::UpdateProgressbar(int value) {
ui->progressbar->setValue(value);
}
答案 1 :(得分:1)
在UI出现之前,主循环被循环锁定,并且在循环结束后立即更新UI。 如果要查看进度条,可以添加QApplication :: processEvents();在循环内。这不是最好的解决方案,但它会起作用。
答案 2 :(得分:1)
要使任何窗口小部件显示,必须处理事件循环。
由于您可以完全控制主线程,因此它的事件循环无法处理将显示和更新QProgressBar
的事件。
修复if的方法是快速但是crapy会添加到循环QApplication::processEvents();
,它会处理事件循环的平均值。
Ofcaource你也应该致电bar->setValue(i);
。
正确的方法是使用信号和插槽进行异步编程。您没有提供有关实际问题的任何详细信息,因此无法提供良好的解决方案。