Qt模態對話框和非模態對話框
- 2020 年 4 月 10 日
- 筆記
模態對話框
Qt 中使用QDialog類實現對話框。我們的對話框通常繼承自QDialog。對話框分為模態對話框和非模態對話框。所謂模態對話框,就是會阻塞同一應用程式中其它窗口的輸入。Qt使用QDialog::exec()來實現模態對話框。如下所示:
int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); QDialog dialog; dialog.exec(); }
效果如下所示:

如果不關閉Dialog窗口,那麼就無法操作下面的MainWindow窗口。這就是模態對話框。
非模態對話框
非模態對話框就是在打開它的時候,我們仍舊能夠操作其它的窗口。Qt使用QDialog::show()來創建非模態對話框。
QDialog *dialog = new QDialog; dialog->show(); dialog->setAttribute(Qt::WA_DeleteOnClose); //在關閉窗口的時候釋放記憶體
非模態對話框,如果我們創建在棧上,那麼它會一閃而過(除非它是全局的或者靜態的)。因此我們將它創建在堆上,即使這樣我們也不能去釋放它,否則他也是一閃而過。那麼隨著每次操作都會有記憶體泄漏。為了避免這一點,Qt提供了一個setAttribute函數來設置可以在關閉它的時候釋放記憶體。