使用QProgressDialog的简单示例:为什么这不能正常工作的任何想法?

时间:2011-12-06 11:42:52

标签: qt

我试图用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;
}

1 个答案:

答案 0 :(得分:14)

您需要允许GUI更新/重绘自身。它不会在每个setXXX调用上执行此操作,因为它太昂贵且不必要。但是,redraw()事件已排队,因此如果您允许Qt处理事件,则对话框将更新。

只需在for循环中添加以下内容,然后阅读it's documentation以了解更多使用方案:

 QApplication::processEvents();

此外,您运行的循环运行得太快,无法显示任何内容。添加一个睡眠电话或做一些有用的工作,以便看到任何东西。

更新(thx Tim)

您可能希望使用QApplication::processEvents( QEventLoop::ExcludeUserInputEvents)来禁止用户事件(还有一个网络事件选项)。它们可能会触发应用程序中的其他部分并导致重新进入和其他不需要的控制流。

但在您的情况下,您可能希望包含用户事件以获取取消按钮。