我正在使用QProgressDialog來顯示在QTreeView中從數據庫加載數據的進度。我使用信號和插槽發送記錄數量和當前記錄。這是段代碼:正確使用QProgressDialog
void MainWindow::loadDataUpdate(int value, int max)
{
if ((max > 0) && (value == 0))
{
m_progressDialog = new QProgressDialog("Warming up - please wait ... ", "Cancel", value, max , this);
m_progressDialog->setMinimumDuration(2);
m_progressDialog->setWindowModality(Qt::WindowModal);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(0);
m_progressDialog->setWindowTitle(this->windowTitle() );
}
if ((value == max) && (max > 0))
{
m_progressDialog->setValue(m_progressDialog->maximum());
return;
}
m_progressDialog->setValue(value);
}
m_progressDialog在.h文件中爲聲明:
QProgressDialog* m_progressDialog;
所以,發送一個零值和最大值創建對話框,並設置它。
我遇到的問題是,如果用戶通過單擊右上角的十字或使用alt-F4關閉ProgressDialog窗體,則會發生錯誤。這大概是因爲我正在使用Qt :: WA_DeleteOnClose。
我想要做的是檢測到對話框已關閉並再次打開,或提供關閉整個應用程序或繼續。
如何測試進度對話框是否已關閉?
或者阻止它被關閉?
感謝您的回答。我把lambda連接代碼放在我的問題的setWindowTitle()行之後,並刪除DeleteOnClose行。當窗體關閉時,似乎並沒有發出取消的信號。我把lambda連接放在適當的地方嗎?再次感謝。 –