1. 程式人生 > >QT中的setAttribute()用法

QT中的setAttribute()用法

https://blog.csdn.net/qq_27312943/article/details/50899866

模態對話方塊就是指在子對話方塊彈出時,焦點被強行集中於該子對話方塊,子對話方塊不關閉,使用者將無法操作其他的視窗。非模態相反,使用者仍然可以操作其他的視窗,包括該子對話方塊的父對話方塊。

如果從執行緒角度來講,模態對話方塊實際上是執行緒阻塞的,也就是子對話方塊是一個執行緒,但是在建立這個子執行緒之後,父視窗就阻塞了;而非模態對話方塊則不是阻塞型的執行緒模型,父子執行緒可以並行執行。 
和所有流行的圖形類庫一樣,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掉自己了,不會再造成記憶體洩漏問題。