我正在使用QProgressDialog显示initializeGL()函数的进度,但是小窗口显示为未绘制...这是简化的代码:

QProgressDialog barTest("Wait","Ok", 0, 100, this);

barTest.move(400,400);

barTest.show();

for(int i = 0; i < 100; i++)
{
    barTest.setValue(i);
    qDebug() << i;
}

我正在运行Mac OS 10.8

最佳答案

问题在于,只要您正在执行代码(例如for循环),窗口的绘制事件就会卡在Qt的事件循环中。

如果要处理绘画事件,可以使用QApplication::processEvents:

for(int i = 0; i < 100; i++)
{
    barTest.setValue(i);
    qDebug() << i;

    // handle repaints (but also any other event in the queue)
    QApplication::processEvents();
}

根据循环的速度,您可能发现仅更新例如每个10%就足够了:
for(int i = 0; i < 100; i++)
{
    barTest.setValue(i);
    qDebug() << i;

    // handle repaints (but also any other event in the queue)
    if(i % 10 == 0) QApplication::processEvents();
}

09-06 11:09