我正在使用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();
}