阻塞同一應用程式中其它可視視窗輸入的對話框。模式對話框有自己的事件循環,使用者必須完成這個對話框中的互動操作,并且關閉了它之後才能通路應用程式中的其它任何視窗。模式對話框僅阻止通路與對話相關聯的視窗,允許使用者繼續使用其它視窗中的應用程式。
顯示模态對話框最常見的方法是調用其exec()函數,當使用者關閉對話框,exec()将提供一個有用的傳回值,并且這時流程控制繼續從調用exec()的地方進行。通常情況下,要獲得對話框關閉并傳回相應的值,我們連接配接預設按鈕,例如:”确定”按鈕連接配接到accept()槽,”取消”按鈕連接配接到reject()槽。另外我們也可以連接配接done()槽,傳遞給它Accepted或Rejected。

主界面被阻塞,不能進行點選、拖動等任何操作。
exec()之後的代碼不會執行,直到關閉模态對話框。
和同一個程式中其它視窗操作無關的對話框。在文字進行中的查找和替換對話框通常是非模式的,允許使用者同時與應用程式的主視窗和對話框進行互動。調用show()來顯示非模式對話框,并立即将控制傳回給調用者。
如果隐藏對話框後調用show()函數,對話框将顯示在其原始位置,這是因為視窗管理器決定的窗戶位置沒有明确由程式員指定,為了保持被使用者移動的對話框位置,在closeEvent()中進行處理,然後在顯示之前,将對話框移動到該位置。
主界面不會被阻塞,可以進行點選、拖動等任何操作。
show()之後的代碼會立即執行。
調用setModal(true)或者setWindowModality(),然後show()。有别于exec(),show() 立即傳回給控制調用者。
對于進度對話框來說,調用setModal(true)是非常有用的,使用者必須擁有與其互動的能力,例如:取消長時間運作的操作。如果使用show()和setModal(true)共同執行一個長時間操作,則必須定期在執行過程中調用QApplication ::processEvents(),以使使用者能夠與對話框互動(可以參考QProgressDialog)。
本文轉自莫水千流部落格園部落格,原文連結:http://www.cnblogs.com/zhoug2020/p/6419962.html,如需轉載請自行聯系原作者