Qt基礎 模態與非模態視窗

2021-10-09 19:10:15 字數 1210 閱讀 5103

設定置頂非模態視窗

在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 ...