Posted on 2011-08-30 23:57
RTY 閱讀(3256)
評論(0) 編輯 收藏 引用 所屬分類:
Qt
模態對話框就是指在子對話框彈出時,焦點被強行集中于該子對話框,子對話框不關閉,用戶將無法操作其他的窗口。非模態相反,用戶仍然可以操作其他的窗口,包括該子對話框的父對話框。
如果從線程角度來講,模態對話框實際上是線程阻塞的,也就是子對話框是一個線程,但是在創建這個子線程之后,父窗口就阻塞了;模態對話框則不是阻塞型的線程模型,父子線程可以并行運行。
和所有流行的圖形類庫一樣,Qt也提供了創建模態和非模態對話框的機制。
在Qt中創建模態對話框,主要用到了QDialog的exec函數:
SonDialog dlg(this);
int res = dlg.exec();
if (res == QDialog::Accepted)
{
QMessageBox::information(this, "INFORMATION", "You clicked OK button!");
}
if (res == QDialog::Rejected)
{
QMessageBox::information(this, "INFORMATION", "You clicked CANCEL button!");
}
正如上面代碼所顯示的,可以通過exec函數的返回值來判斷用戶點擊了哪個按鈕使得模態對話框退出的,這可以使得我們能夠根據用戶的不同行為在推出退出模態對話框之后采取不同的處理方法。
在Qt中創建非模態對話框,主要用到了QDialog的show函數:
SonDialog *dlg;
dlg = new SonDialog(this);
dlg->show();
由上面代碼,細心的讀者可能就會問了,既然new了,如果不delete,那么內存不就存在了泄露的問題了嗎?確實如此!所以,我們希望該Qt窗口在退出時自動能夠delete掉自己,因此,我們在SonDialog的構造函數里,添加這樣的一句代碼:
setAttribute (Qt::WA_DeleteOnClose);
這樣,我們的SonDialog就能夠在它退出時自動的delete掉自己了,不會再造成內存泄漏問題。