QDialog 類

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

頭: #include <QDialog>
繼承: QWidget
繼承者: Q3FileDialog , Q3ProgressDialog , Q3TabDialog , Q3Wizard , QAbstractPrintDialog , QColorDialog , QErrorMessage , QFileDialog , QFontDialog , QInputDialog , QMessageBox , QPageSetupDialog , QPrintPreviewDialog , QProgressDialog ,和 QWizard

公共類型

enum DialogCode { Accepted, Rejected }

特性

公共函數

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

重實現公共函數

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

公共槽

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

信號

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

重實現保護函數

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

額外繼承成員

詳細描述

The QDialog 類是對話框窗口的基類。

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

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

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

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

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

顯示模態對話框的最常見方式,是調用它的 exec () 函數。當用戶關閉對話框時, exec () 將提供有用 返迴值 。通常,為關閉對話框並返迴適當值,連接默認按鈕,如 OK ,到 accept () 槽和 Cancel 按鈕到 reject () 槽。另外,可以調用 done () 槽采用 接受 or Rejected .

替代是調用 setModal (true) 或 setWindowModality (),然後 show ()。不像 exec (), show () 將控製立即返迴給調用者。調用 setModal (true) 對於進度對話框尤其有用,用戶必須擁有與對話框交互的能力 (如:取消長時間運行的操作)。若使用 show () 和 setModal (true) 一起以履行長時間操作,必須調用 QApplication::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, SIGNAL(findNext()), this, SLOT(findNext()));
    }
    findDialog->show();
    findDialog->raise();
    findDialog->activateWindow();
}
					

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

成員類型文檔編製

enum QDialog:: DialogCode

由模態對話框返迴的值。

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

特性文檔編製

This property holds whether show() should pop up the dialog as modal or modeless.

By default, this property is false and show () pops up the dialog as modeless. Setting his property to true is equivalent to setting QWidget::windowModality to Qt::ApplicationModal .

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

訪問函數:

bool isModal () const
void setModal (bool modal )

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

sizeGripEnabled : bool

This property holds whether the size grip is enabled.

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

訪問函數:

bool isSizeGripEnabled () const
void setSizeGripEnabled (bool)

成員函數文檔編製

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

構造對話框采用父級 parent .

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

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

另請參閱 QWidget::setWindowFlags ().

QDialog:: ~QDialog ()

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

[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 protected] void QDialog:: closeEvent ( QCloseEvent * e )

重實現自 QWidget::closeEvent ().

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

重實現自 QWidget::contextMenuEvent ().

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

關閉對話框並將其結果代碼設為 r 。若此對話框的展示是采用 exec (),done() 導緻本地事件循環的完成,且 exec () 返迴 r .

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

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

[virtual protected] bool QDialog:: event ( QEvent * e )

重實現自 QObject::event ().

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

重實現自 QObject::eventFilter ().

[slot] int QDialog:: exec ()

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

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

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

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

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

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

該函數在 Qt 4.1 引入。

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

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

重實現自 QWidget::keyPressEvent ().

[虛擬] QSize QDialog:: minimumSizeHint () const

重實現自 QWidget::minimumSizeHint ().

[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 ().

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

重實現自 QWidget::resizeEvent ().

int QDialog:: result () const

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

注意: When used from QMessageBox instance the result code type is QMessageBox::StandardButton

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

另請參閱 setResult ().

void QDialog:: setResult ( int i )

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

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

另請參閱 result ().

[虛擬] void QDialog:: setVisible ( bool visible )

重實現自 QWidget::setVisible ().

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

重實現自 QWidget::showEvent ().

[虛擬] QSize QDialog:: sizeHint () const

重實現自 QWidget::sizeHint ().