2013-06-24 146 views
2

期間不畫我使用的是QProgressDialog,以顯示我的initializeGL()功能的進步,但在小窗口中顯示未上漆......這裏的簡化代碼: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

回答

1

問題是,只要您正在執行代碼(例如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(); 
} 
相關問題