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函數來設置可以在關閉它的時候釋放記憶體。