自訂對話方塊(Dialog)


QDialog 提供了一些基礎,讓您可以繼承QDialog來自訂對話方塊。

QDialog的show()方法可以顯示對話方塊,如果您使用setModal()並設定為true,則show()會以獨佔(Modal)模式顯示對 話,使用者必須回應對話方塊,才可以繼續視窗操作,如果setModal()為false,則show()顯示的對話方塊為非獨佔(Modelless) 模式。QDialog的exec()方法則會忽略setModal()的設定,直接將對話方塊以獨佔模式顯示。

使 用exec()方法獨佔模式顯示對話方塊時,程式流程會停止在該處,當對話方塊結束,exec()方法會傳回執行結果,您可以使用accept()方法關閉對話方塊,exec()會執行 完成並傳回QDialog::Accepted,或使用reject()方法關閉對話方塊,exec()會執行完成並傳回QDialog:: Rejected,或者是使用done()方法並指定整數值,關閉對話方塊之後exec()會傳回指定的整數值。

無論是exec()、accept()、reject()或done(),它們都是QDialog的Slot,所以您可以在繼承QDialog之後,自定 義一些元件,將元件的Signal連接至QDialog的這些Slot,例如自定義QPushButton為OK按鈕,將其clicked()的 Signal連接至QDialog的accept() Slot,如此使用者按下OK按鈕時,exec()方法就會傳回
QDialog::Accepted。

當您呼叫QDialog的
accept ()、reject()時,QDialog會分別發出Signal accepted()、rejected(),而呼叫done() 並設定其整數為QDialog:: Accepted時,會發出Signal accepted(),呼叫done()並設定其整數為QDialog::Rejected時,會發出Signal rejected()。

無論是呼叫
accept()、reject()或done()時, finished()的Signal都會被發出,並帶有所設定的結果值。

您也可以使用setResult()設定獨佔對話方塊的傳回值,使用result()取得
獨佔對話方塊的傳回值。