QT對話方塊模式與非模式

2022-08-30 21:51:24 字數 1514 閱讀 8726

非模態對話方塊(modeless dialog)的概念不是模態對話方塊就是在其沒有被關閉之前,使用者不能與同乙個應用程式的其他視窗進行互動,直到該對話方塊關閉。對於在模態來顯示對話方塊;另一種是使用show()方法,它使得對話方塊既可以非模態顯示,決定它是非模態的是對話方塊的modal屬性。

qt非模態對話方塊選擇是通過其屬性modal來確定的。我們來看看modal屬性,其定義如下:

而使用exec()方法顯示對話方塊的話,將忽略modal屬性值的設定並把對話方塊設定為一般使用setmodal()方法來設定對話方塊的modal屬性。

我們總結一下設定對話方塊為◆ 如果要設定為mydialog mydlg;    mydlg.exec();也可以使用show()方法,示例**如下:

mydialog mydlg;    mydlg.setmodal(true);    mydlg.show();

◆  如果要設定為mydialog mydlg;    mydlg.setmodal(false);

//或者

mydlg.setmodal();

mydlg.show();

再次強調,目前有的朋友對於非模態對話方塊的認識有誤解,認為使用show()方法顯示的就是小貼士:有時候,我們需要乙個對話方塊以mydialog mydlg;   

mydlg.setmodal(false);

//或者

mydlg.setmodal();    mydlg.show();

//關鍵是下面這行

mydlg.setwindowflags(qt::windowstaysontophint);

模態對話方塊,主要用到了qdialog的exec函式:

sondialog

dlg(this);

int

res = dlg.exec();

if (res == qdialog::accepted)

if (res == qdialog::rejected)

正如上面**所顯示的,可以通過exec函式的返回值來判斷使用者點選了哪個按鈕使得模態對話方塊之後採取不同的處理方法。

細心的讀者可能就會問了,既然new了,如果不delete,那麼記憶體不就存在了洩露的問題了嗎?確實如此!所以,我們希望該setattribute (qt::wa_deleteonclose);

這樣,我們的sondialog就能夠在它退出時自動的delete掉自己了,不會再造成記憶體洩漏問題。

Qt 非模式對話方塊

應用例項 搜尋框 建立乙個widget物件,作為主窗體的成員變數 searchwindow m searchwin m searchwin new searchwindow this m searchwin setwindowflags qt window 在使用者執行搜尋選單時顯示此視窗 int ...

MFC 對話方塊程式 模式對話方塊與非模式對話方塊

一 根據主視窗型別,mfc軟體工程可以分為以下幾種架構模型 例如 記事本和畫筆等。2 mdi multiple document inte ce 多文件介面,乙個主框架視窗下可以同時編輯多份文件。例如 vc 6.0,photoshop等軟體。3 基於對話方塊的軟體模型 主視窗是通過資源管理器,在對話...

Qt 之模式 非模式 半模式對話方塊

1 qt模態對話方塊 mainwindow pmainwindow new mainwindow pmainwindow setwindowtitle qstringliteral 主介面 pmainwindow show customwindow pdialog new customwindow ...