我有問題確保對話框關閉/釋放以下Qt代碼。QDialog關閉崩潰
//Segment 1: To open a 'wait' dialog for some long-running tasks
void MainWindow::ui_showProgressDialog(QString title) {
dlgProgress = new QProgressDialog(title, tr("Cancel"), 0, 0, this);
dlgProgress->setAttribute(Qt::WA_DeleteOnClose); // line 1
dlgProgress->setModal(true);
dlgProgress->show();
connect(voidWatcher, SIGNAL(finished()),
this, SLOT(onPopulationFile()));
}
//Segment 2: Attempts to close the 'wait' dialog
void MainWindow::onPopulationFile() {
qDebug((dlgProgress == NULL) ? "true" : "false");
if (dlgProgress) //
{
qDebug("0");
dlgProgress->close(); // line 2
qDebug("1");
}
qDebug((dlgProgress == NULL) ? "true" : "false");
}
問題:當我觸發調用「ui_showProgressDialog」兩次,第二次呼叫總是崩潰我的程序。原來,我的代碼有沒有1段1號線,以及從QtCreator,它總是崩潰上段2調試信息的第二行顯示如下
// first call to onPopulationFile
false
0
1
false
// second call to onPopulationFile
false
0
*** CRASH ***
,我讀了永不刪從不同的線程對象的文檔,我懷疑調用'onPopulationFile'是從非主線程調用的。所以我添加了第1行來分段,讓程序決定何時刪除對象。但它似乎不起作用。對這個問題的任何建議?
實驗做:如果我用了QDialog取代QProgressDialog,程序不用崩潰,而調試消息顯示
// first call to onPopulationFile
false
0
1
false
// second call to onPopulationFile
false
0
1
false
所以,
- 爲什麼在段2的第二個空測試總是失敗? [編輯:我必須明確地設置變量爲NULL]
- 有沒有更好的方法來關閉'等待'對話框?
- 我試圖關閉/釋放對話框,因爲我希望儘快釋放內存。我真的需要手動刪除對話框嗎?
平臺:Qt的開源4.8(64),視窗7(64),MinGW的(rubenvb 4.7.2)
什麼是'voidWatcher'和'finished'的目的是什麼? – UmNyobe
voidWatcher的類型爲QFutureWatcher –