=======================================================
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被阻塞并关闭。
有人知道如何解决这个问题吗?谢谢!
发布于 2017-09-11 21:44:11
是的,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);
} 发布于 2017-09-11 21:54:59
主线程在UI出现之前被循环锁定,UI在循环结束后立即更新。如果您想看到进度条,可以在循环中添加QApplication::processEvents();。这不是最好的解决方案,但它会起作用的。
发布于 2017-09-12 03:34:14
要允许任何小部件出现,必须处理事件循环。由于您可以完全控制主线程,因此它的事件循环无法处理将显示和更新QProgressBar的事件。
修复if的一种方法是将处理事件循环事件的循环QApplication::processEvents();添加到循环中。当然,你也应该调用bar->setValue(i);。
正确的方法是异步编程,即使用信号和插槽。您没有提供有关实际问题的任何详细信息,因此无法提供良好的解决方案。
https://stackoverflow.com/questions/46156374
复制相似问题