QDialog 類

QDialog 類是對話框窗口的基類。 更多...

頭: #include <QDialog>
qmake: QT += widgets
繼承: QWidget
繼承者:

QColorDialog , QErrorMessage , QFileDialog , QFontDialog , QInputDialog , QMessageBox , QProgressDialog ,和 QWizard

公共類型

enum DialogCode { Accepted, Rejected }

特性

公共函數

QDialog (QWidget * parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtual ~QDialog ()
bool isSizeGripEnabled () const
int result () const
void setModal (bool modal )
void setResult (int i )
void setSizeGripEnabled ( bool )

重實現公共函數

virtual QSize minimumSizeHint () const override
virtual void setVisible (bool visible ) override
virtual QSize sizeHint () const override

公共槽

virtual void accept ()
virtual void done (int r )
virtual int exec ()
virtual void open ()
virtual void reject ()

信號

void accepted ()
void finished (int result )
void rejected ()

重實現保護函數

virtual void closeEvent (QCloseEvent * e ) override
virtual void contextMenuEvent (QContextMenuEvent * e ) override
virtual bool eventFilter (QObject * o , QEvent * e ) override
virtual void keyPressEvent (QKeyEvent * e ) override
virtual void resizeEvent ( QResizeEvent * ) override
virtual void showEvent (QShowEvent * event ) override

詳細描述

對話框窗口是頂級窗口,主要用於短期任務和與用戶簡短交流。QDialogs 可以是模態 (或非模態) 的。QDialogs 可以提供 返迴值 ,且它們可以有 默認按鈕 。QDialog 也可擁有 QSizeGrip 在其右下角,使用 setSizeGripEnabled ().

注意:QDialog (及任何其它 Widget 有類型 Qt::Dialog ) 使用父級 Widget 稍微異於其它 Qt 類。對話框始終是頂層 Widget,但若有父級,默認位置居中父級的頂層 Widget 頂部 (若它本身不在頂層)。它還會共享父級的任務欄條目。

使用重載 QWidget::setParent () 函數改變所有權對於 QDialog 小部件。此函數允許明確設置要重設父級的 Widget 的窗口標誌;使用重載函數將清零 Widget 的窗口係統特性指定窗口標誌 (尤其,將重置 Qt::Dialog 標誌)。

注意: 對話框的父級關係 not 隱含對話框將始終被堆疊在父級窗口頂部。要確保對話框始終在頂部,使對話框模態。這也適用於對話框本身的子級窗口。要確保對話框的子級窗口停留在對話框頂部,也使子級窗口模態。

A modal 對話框是阻塞同一應用程序中其它可見窗口輸入的對話框。通常用於從用戶請求文件名 (或用於設置應用程序首選項) 的,是模態對話框。對話框可以為 應用程序模態 (默認) 或 窗口模態 .

打開應用程序模態對話框時,用戶必須完成與對話框的交互並關閉對話框,在它們可以訪問應用程序中的任何其它窗口之前。窗口模態對話框僅阻塞訪問對話框關聯的窗口,允許用戶繼續使用應用程序中的其它窗口。

顯示模態對話框的最常見方式,是調用它的 exec () 函數。當用戶關閉對話框時, exec () 將提供有用 返迴值 . To close the dialog and return the appropriate value, you must connect a default button, e.g. an OK 按鈕到 accept () 槽和 Cancel 按鈕到 reject () slot. Alternatively, you can call the done () 槽采用 接受 or Rejected .

替代是調用 setModal (true) 或 setWindowModality (),然後 show ()。不像 exec (), show () 將控製立即返迴給調用者。調用 setModal (true) 對於進度對話框尤其有用,用戶必須擁有與對話框交互的能力 (如:取消長時間運行的操作)。若使用 show () 和 setModal (true) 一起以履行長時間操作,必須調用 QCoreApplication::processEvents () 在處理期間周期性地使用戶能夠與對話框進行交互。(見 QProgressDialog )。

非模態對話框

A modeless 對話框是獨立於同一應用程序中其它窗口運轉的對話框。文字處理程序中的查找 替換對話框經常是非模態的,以允許用戶與應用程序主窗口和對話框進行交互。

非模態對話框的顯示是使用 show (),將控製立即返迴給調用者。

若援引 show() 函數在隱藏對話框之後,對話框將顯示在其原始位置。這是因為窗口管理器決定程序員未明確放置窗口的位置。要保留用戶已移動對話框的位置,保存其位置在 closeEvent() 處理程序,然後把對話框移到該位置,在再次展示它之前。

默認按鈕

對話框的 default 按鈕是用戶按下 Enter (Return) 鍵時按下的按鈕。此按鈕用於錶示用戶接受對話框設置並想要關閉對話框。使用 QPushButton::setDefault (), QPushButton::isDefault () 和 QPushButton::autoDefault () 以設置並控製對話框的默認按鈕。

Esc 鍵

若用戶在對話框中按下 Esc 鍵, QDialog::reject () 會被調用。這將導緻窗口被關閉: 關閉事件 不可以為 ignored .

可擴展性

可擴展性是以 2 種方式展示對話框的能力:展示最常用選項的部分對話框,和展示所有選項的完整對話框。通常,可擴展對話框最初以部分對話框形式齣現,但帶有 更多 觸發按鈕。若用戶按下 更多 按鈕,展開對話框。 擴展範例 展示如何使用 Qt 達成可擴展對話框。

返迴值 (模態對話框)

模態對話框經常用於要求返迴值的狀況,如,指示用戶是否按下 OK or Cancel 。可以關閉對話框通過調用 accept () 或 reject () 槽,和 exec () 會返迴 接受 or Rejected 酌情。 exec () 調用返迴對話框的結果。結果還可獲取自 result () 若對話框未被銷毀。

為修改對話框的關閉行為,可以重實現函數 accept (), reject () 或 done ()。 closeEvent() 函數纔應被重實現,以保留對話框的位置 (覆寫標準關閉或拒絕行為)。

代碼範例

模態對話框:

void EditorWindow::countWords()
{
    WordCountDialog dialog(this);
    dialog.setWordCount(document().wordCount());
    dialog.exec();
}
					

非模態對話框:

void EditorWindow::find()
{
    if (!findDialog) {
        findDialog = new FindDialog(this);
        connect(findDialog, &FindDialog::findNext,
                this, &EditorWindow::findNext);
    }
    findDialog->show();
    findDialog->raise();
    findDialog->activateWindow();
}
					

另請參閱 QDialogButtonBox , QTabWidget , QWidget , QProgressDialog , GUI 設計手冊:對話框、標準 , 擴展範例 ,和 標準對話框範例 .

成員類型文檔編製

enum QDialog:: DialogCode

由模態對話框返迴的值。

常量
QDialog::Accepted 1
QDialog::Rejected 0

特性文檔編製

此特性保持是否 show () 應該以模態 (或非模態) 方式彈齣對話框

默認情況下,此特性為 false and show () 以非模態方式彈齣對話框。將此特性設為 true 相當於設置 QWidget::windowModality to Qt::ApplicationModal .

exec () 忽略此特性的值,並始終以模態方式彈齣。

訪問函數:

bool isModal () const
void setModal (bool modal )

另請參閱 QWidget::windowModality , show (),和 exec ().

sizeGripEnabled : bool

此特性保持是否啓用大小握把

A QSizeGrip 被放置在對話框右下角,當此屬性被啓用時。默認情況下,大小握把是禁用的。

訪問函數:

bool isSizeGripEnabled () const
void setSizeGripEnabled ( bool )

成員函數文檔編製

QDialog:: QDialog ( QWidget * parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

構造對話框采用父級 parent .

對話框始終是頂層 Widget,但若有父級,默認位置居中父級頂部。它還會共享父級的任務欄條目。

Widget 標誌 f 被傳遞給 QWidget 構造函數。例如,若不想要對話框標題欄中的 What's This 按鈕,傳遞 Qt::WindowTitleHint | Qt::WindowSystemMenuHint in f .

另請參閱 QWidget::setWindowFlags ().

[virtual slot] void QDialog:: accept ()

隱藏模態對話框並將結果代碼設為 接受 .

另請參閱 reject () 和 done ().

[signal] void QDialog:: accepted ()

此信號被發射當已接受對話框由用戶或通過調用 accept () 或 done () 采用 QDialog::Accepted 自變量。

注意,此信號 not 被發射當隱藏對話框采用 hide () 或 setVisible (false)。這包括可見時刪除對話框。

該函數在 Qt 4.1 引入。

另請參閱 finished () 和 rejected ().

[virtual slot] void QDialog:: done ( int r )

關閉對話框並將其結果代碼設為 r finished () signal will emit r ; if r is QDialog::Accepted or QDialog::Rejected accepted () 或 rejected () signals will also be emitted, respectively.

If this dialog is shown with exec (), done() also causes the local event loop to finish, and exec () 返迴 r .

就像 QWidget::close (),done() 刪除對話框若 Qt::WA_DeleteOnClose 標誌有設置。若對話框是應用程序 main 小部件,應用程序終止。若對話框是最後關閉窗口, QApplication::lastWindowClosed () 信號發射。

另請參閱 accept (), reject (), QApplication::activeWindow (),和 QCoreApplication::quit ().

[virtual slot] int QDialog:: exec ()

把對話框展示成 模態對話框 ,阻塞直到用戶關閉它。函數返迴 DialogCode 結果。

若對話框為 應用程序模態 ,用戶無法與同一應用程序中的任何其它窗口交互,直到關閉對話框為止。若對話框為 窗口模態 ,僅阻塞與父級窗口的交互,當打開對話框時。默認情況下,對話框為應用程序模態。

注意: 避免使用此函數;取而代之,使用 open() 。不像 exec(), open () 是異步的,且不會産生額外的事件循環。這可以阻止發生一係列的危險 Bug (如:刪除對話框的父級,當對話框憑藉 exec() 打開時)。當使用 open (), 可以連接 finished () 信號對於 QDialog 到通知,當關閉對話框時。

另請參閱 open (), show (), result (),和 setWindowModality ().

[signal] void QDialog:: finished ( int result )

此信號被發射當對話框的 result 代碼有設置,要麼通過用戶要麼通過調用 done (), accept (),或 reject ().

注意,此信號 not 被發射當隱藏對話框采用 hide () 或 setVisible (false)。這包括可見時刪除對話框。

該函數在 Qt 4.1 引入。

另請參閱 accepted () 和 rejected ().

[virtual slot] void QDialog:: open ()

把對話框展示成 窗口模態對話框 ,立即返迴。

該函數在 Qt 4.5 引入。

另請參閱 exec (), show (), result (),和 setWindowModality ().

[virtual slot] void QDialog:: reject ()

隱藏模態對話框並將結果代碼設為 Rejected .

另請參閱 accept () 和 done ().

[signal] void QDialog:: rejected ()

此信號被發射當已拒絕對話框由用戶或通過調用 reject () 或 done () 采用 QDialog::Rejected 自變量。

注意,此信號 not 被發射當隱藏對話框采用 hide () 或 setVisible (false)。這包括可見時刪除對話框。

該函數在 Qt 4.1 引入。

另請參閱 finished () 和 accepted ().

[虛擬] QDialog:: ~QDialog ()

銷毀 QDialog ,刪除其所有子級。

[override virtual protected] void QDialog:: closeEvent ( QCloseEvent * e )

重實現: QWidget::closeEvent (QCloseEvent *event).

[override virtual protected] void QDialog:: contextMenuEvent ( QContextMenuEvent * e )

重實現: QWidget::contextMenuEvent (QContextMenuEvent *event).

[override virtual protected] bool QDialog:: eventFilter ( QObject * o , QEvent * e )

重實現: QObject::eventFilter (QObject *watched, QEvent *event).

[override virtual protected] void QDialog:: keyPressEvent ( QKeyEvent * e )

重實現: QWidget::keyPressEvent (QKeyEvent *event).

[override virtual] QSize QDialog:: minimumSizeHint () const

重實現訪問函數為特性: QWidget::minimumSizeHint .

[override virtual protected] void QDialog:: resizeEvent ( QResizeEvent * )

重實現: QWidget::resizeEvent (QResizeEvent *event).

int QDialog:: result () const

一般而言,返迴模態對話框的結果代碼 接受 or Rejected .

注意: 當調用 QMessageBox 實例,返迴值為 QMessageBox::StandardButton 枚舉。

不要調用此函數,若構造對話框具有 Qt::WA_DeleteOnClose 屬性。

另請參閱 setResult ().

void QDialog:: setResult ( int i )

將模態對話框的結果代碼設為 i .

注意: 推薦使用之一值定義通過 QDialog::DialogCode .

另請參閱 result ().

[override virtual] void QDialog:: setVisible ( bool visible )

重實現訪問函數為特性: QWidget::visible .

[override virtual protected] void QDialog:: showEvent ( QShowEvent * event )

重實現: QWidget::showEvent (QShowEvent *event).

[override virtual] QSize QDialog:: sizeHint () const

重實現訪問函數為特性: QWidget::sizeHint .