我试图用QProgressDialog做一个简单的例子。因此,我在一个小部件中有一个QPushButton,当我按下它时,一个QProgressDialog出现,一直进行到100,然后隐藏。
我的问题是,如果第二次单击“保存”按钮,QProgressDialog只会出现并消失。
用户按下按钮时调用的我的广告位代码:
progressDialog->show();
progressDialog->setWindowModality(Qt::WindowModal);
for(int i = 0; i <= 100; ++i)
{
progressDialog->setValue(i);
if(progressDialog->wasCanceled())
break;
}
最佳答案
您需要允许GUI更新/重绘自身。它不会在每个setXXX调用上执行此操作,因为它太昂贵且不必要。但是,redraw()事件已排队,因此,如果允许Qt处理事件,则对话框将更新。
只需在您的for循环中添加以下内容,并阅读it's documentation以了解更多使用情况:
QApplication::processEvents();
另外,您所执行的循环运行太快,无法显示任何内容。添加睡眠呼叫或进行一些有用的工作以查看所有内容。
更新(thx Tim)
您可能想使用
QApplication::processEvents( QEventLoop::ExcludeUserInputEvents)
禁止用户事件(还有网络事件选项)。它们可能会触发应用程序中的其他部分,并导致重新进入和其他不必要的控制流。但是在您的情况下,您可能希望包括用户事件以获取“取消”按钮。