設定置頂非模態視窗
在qt中,qdialog是所有對話方塊視窗類的基類,不只是對話方塊有模態與非模態區分,qwidget和qmainwindow視窗也可以設為模態,因此文章不稱模態/非模態對話方塊,而叫做模態/非模態視窗。
模態(modal)視窗:視窗彈出後,沒關閉之前,不可以對同一應用程式的其他視窗進行操作;
非模態(modeless)視窗:視窗彈出後,沒關閉之前,可以對同一應用程式的其他視窗進行操作,可以同時和多個視窗進行互動;
視窗的show()函式顯示的型別是非模態的,有幾種方法可以將視窗設為模態,如下:
方法1:exec()
qdialog dlg
(this);
dlg.
exec()
;
– 說明:exec是execute(執行)的縮寫,當呼叫exec()函式時,並不會立即返回,只用當對話方塊關閉才會返回,因此,只有關閉對話方塊才會執行後續的**。
方法2:setmodal()
qdialog dlg
(this);
dlg.
setmodal
(true);
dlg.
show()
;
方法3:setwindowmodality()
qdialog dlg
(this);
dlg.
setwindowmodality
;dlg.
show()
;
列舉值值說明
qt::nonmodal
0非模態,不阻塞任何視窗
qt::windowmodal
1模態,阻塞它的父視窗、所有的祖先視窗以及他們的子視窗
qt::nonmodal
2模態,阻塞應用程式所有的視窗
這兩種視窗的模態實現只有上述qdialog中的方法3,即setwindowmodality(),不再贅述。
有子視窗和父視窗,要實現子視窗置頂,但是可以對父視窗進行操作,可以在父視窗中進行設定:
subdlg-
>
setparent
(this
,qt::window)
;
非模態視窗
開發過程中想實現新執行緒建立子視窗處理子視窗的事情,父視窗仍然可以相應使用者請求的功能。利用 非模態視窗 實現 非模態對話方塊在工作列上顯示 為什麼dll遠端建立的非模式對話方塊一閃就沒了,而模式對話方塊就不會 vc中建立無模式對話方塊的問題 建立無模式對話方塊,為什麼生成的對話方塊一閃就沒了?模式...
C 模態視窗和非模態視窗
c 視窗對話方塊一般分為兩種型別 模態型別 modal 與非模態型別 modeless 所謂模態對話方塊,就是指除非採取有效的關閉手段,使用者的滑鼠焦點或者輸入游標將一直停留在其上的對話方塊。非模態對話方塊則不會強制此種特性,使用者可以在當前對話方塊以及其他視窗間進行切換下例中的form1使用模態方...
「模態」與「非模態」
模態與非模態,主要就是體現在是否 阻塞 應用程式上。模態 在該視窗彈出後,會阻塞應用程式的視窗,使其不可操作 非模態 不會阻塞應用程式的視窗,兩者可獨立操作。模,就是模子,模子是不可更改的,因此模態情況下,除了它本身之外的內容不可操作。兩個的使用根據實際情況而定,轉換的方式是通過 setmodal ...