我需要加載一個大檔案以使用 OpenGL 進行決議和繪制。整個程序非常耗時。所以想在決議前實作一個提示對話框。但是下面的代碼是行不通的。
void parseFile()
{
QMessageBox* msgbox = new QMessageBox();
msgbox->setModal(false);
msgbox->setWindowTitle(tr("message box"));
msgbox->setText("Please wait patiently......")
msgbox->show();
/* parse file and draw */
......
}
但它顯示像也被凍結:

如何實作?
uj5u.com熱心網友回復:
show()實際上并沒有顯示對話框的內容。它只告訴事件回圈盡快顯示對話框。但是由于您在 after 之后立即呼叫更多代碼show(),因此 evnt 回圈沒有機會完成它的作業。
解決這個問題的最簡單方法是呼叫QCoreApplication::processEvents()after msgbox->show()。這將強制事件回圈立即完成作業。
如果這不起作用,請嘗試此引數QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents)
另一種選擇是將繁重的計算移至函式,然后顯示對話框,然后使用計時器安排計算。
...
msgbox->show();
QTimer::singleShot(0, &doHeavyWork);
這將首先處理與顯示對話框相關的所有事件,然后才開始繁重的作業(即決議檔案)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/464928.html
標籤:qt
上一篇:如何在主視窗中創建QT登錄頁面?
