2017-02-15 63 views
1

我有一個QMainWindow實例,它連貫地需要讀取到xml文件。第一個文件包含構建UI和第二個所有元數據的所有必要信息。所以在我的MainWindowopen功能我想讀的第一個文件等之後再刷UI:如何在Qt中執行繪畫?

MainWindowopen範圍:

readFirstFile(QString filename); 
update(); 
readSecondFile(QString filename); 

但上面沒有任何影響。如何在閱讀第二個文件之前執行繪畫?

+0

我認爲你這樣做是因爲文件讀取是「慢」,並且你希望UI響應迴應。相反,將文件讀取用於線程池,並讓工作者函數線程安全地更新UI的狀態。繪畫將自動完成,無需擔心,因爲事件循環將繼續旋轉以處理來自工人的數據。 –

回答

4

如果您需要立即重繪,您可以使用repaint()而不是update()

QWidget::update()

Qt的文檔,此功能不會導致立即重繪;相反,當Qt返回主事件循環時,它會安排一個繪製事件進行處理。這允許Qt優化以獲得更快的速度和更少的閃爍,而不是重繪()的調用。

+0

這似乎是正確的,但會導致這種行爲:只要調用repaint(),在MainWindow中創建的對象消失(即:某些按鈕和背景圖像),但讀取第一個文件時創建的對象將顯示當閱讀第二個文件完成 – tobilocker

+0

我猜你的文件閱讀方法是阻塞,需要一段時間呢?如果是這樣,你應該可能在後臺線程或其他東西中運行它們,或者我不知道爲什麼其他用戶界面會「消失」。 – xander

+0

我需要弄清楚什麼阻止重繪。目前這個問題已經清楚地回答了。謝謝 – tobilocker