一、模态對話框與非模态對話框定義
模态對話框是指在沒有關閉它之前,不能再與同一個應用程式的其他視窗進行互動,比如建立項目時彈出的對話框。
非模态對話框是指既可以和它互動,也可以與同一程式中的其他視窗互動,如word中查找替換對話框。
二、模态對話框與非模态對話框的使用
1、模态對話框
方式一、使用指針堆上建立(需要手動釋放)
QDialog *dlg = new QDialog(this); //建立對話框對象
dlg->setWindowTitle("模态對話框"); //對話框标題
dlg->resize(200, 200); //為了避免預設彈框太小,這裡設定下尺寸
dlg->exec(); //顯示對話框
delete dlg; //因為定制的是臨時對象,是以這裡建議釋放下資源
dlg = nullptr;
方式二、棧上建立,不需要我們釋放
QDialog dlg(this);
dlg.exec();
dlg.resize(200,200);
2、非模态對話框
QDialog * dlg2 = new QDialog(this);
dlg2->resize(200,200);
dlg2->show();
dlg2->setAttribute(Qt::WA_DeleteOnClose); //55号屬性,關閉後釋放資源
qDebug()<<"非模态對話框彈出了";
三、對比MFC中的模态對話框與非模态對話框
1、模态對話框
CASCEDlg dlg;
dlg.DoModal();
2、非模态對話框
CASCEDlg *pDlg = new CASCEDlg;
pDlg->Create(IDD_DIALOG1, this);
pDlg->ShowWindow(SW_SHOW);
記得在對話框事件中釋放資源
void CTestDlg::OnCancel()
{
DestroyWindow();
}
void CTestDlg::PostNcDestroy()
{
CDialog::PostNcDestroy();
delete this;
}