QDialog類參考
QDialog類是對話框視窗的基類。 詳情請見……
#include <qdialog.h>
繼承了QWidget。
被QColorDialog、QErrorMessage、QFileDialog、QFontDialog、QInputDialog、QMessageBox、QProgressDialog、QTabDialog和QWizard繼承。
所有成員函數的清單。
公有成員
- QDialog ( QWidget * parent = 0, const char * name = 0, bool modal = FALSE, WFlags f = 0 )
- ~QDialog ()
- enum DialogCode { Rejected, Accepted }
- int result () const
- virtual void show ()
- void setOrientation ( Orientation orientation )
- Orientation orientation () const
- void setExtension ( QWidget * extension )
- QWidget * extension () const
- void setSizeGripEnabled ( bool )
- bool isSizeGripEnabled () const
公有槽
- int exec ()
屬性
- bool sizeGripEnabled - 大小控制是否生效
保護成員
- void setResult ( int i )
保護槽
- virtual void done ( int r )
- virtual void accept ()
- virtual void reject ()
- void showExtension ( bool showIt )
較長的描述
QDialog類是對話框視窗的基類。
對話框視窗是主要用于短期任務以及和使用者進行簡要通訊的頂級視窗。QDialog可以是模式的也可以是非模式的。QDialog支援擴充性并且可以提供傳回值。它們可以有預設按鈕。QDialog也可以有一個QSizeGrip在它的右下角,使用setSizeGripEnabled()。
注意QDialog使用父視窗部件的方法和Qt中其它類稍微不同。對話框總是頂級視窗部件,但是如果它有一個父對象,它的預設位置就是父對象的中間。它也将和父對象共享工具條條目。
這裡有三種有用的對話框:
- 模式對話框就是阻塞同一應用程式中其它可視視窗的輸入的對話框:使用者必須完成這個對話框中的互動操作并且關閉了它之後才能通路應用程式中的其它任何視窗。模式對話框有它們自己的本地事件循環。用來讓使用者選擇一個檔案或者用來設定應用程式參數的對話框通常是模式的。調用exec()來顯示模式對話框。當使用者關閉這個對話框,exec()将提供一個可用的傳回值并且這時流程控制繼續從調用exec()的地方進行。通常,我們連接配接預設按鈕,例如“OK”到accept()槽并且把“Cancel”連接配接到reject()槽,來使對話框關閉并且傳回适當的值。另外我們也可以連接配接done()槽,傳遞給它Accepted或Rejected。
- 非模式對話框是和同一個程式中其它視窗操作無關的對話框。在字處理軟體中查找和替換對話框通常是非模式的來允許同時與應用程式主視窗和對話框進行互動。調用show()來顯示非模式對話框。show()立即傳回,這樣調用代碼中的控制流将會繼續。在實踐中你将會經常調用show()并且在調用show()的函數最後,控制傳回主事件循環。
- “半模式”對話框是立即把控制傳回給調用者的模式對話框。半模式對話框沒有它們自己的事件循環,是以你将需要周期性地調用QApplication::processEvents()來讓這個半模式對話框有處理它的事件的機會。程序對話框(例如QProgressDialog)就是一個執行個體,在你想讓使用者能夠和程序對話框互動的地方那個,例如撤銷一個長期運作的操作,但是需要實際上執行這個操作。半模式對話框模式标記被設定為真并且調用show()函數來被顯示。
預設按鈕
對話框的“預設”按鈕适當使用者按下Enter鍵或者換行鍵時被按下的按鈕。這個按鈕用來表示使用者接受對話框的設定并且希望關閉這個對話框。使用QPushButton::setDefault()、QPushButton::isDefault()和QPushButton::autoDefault()來設定并且控制對話框的預設按鈕。
擴充性
擴充性是可以用兩種方式來顯示對話框:一個局部對話框用來顯示通常最常用的選項,和一個顯示所有選項的完全對話框。通常可擴充的對話框将初始化為一個局部對話框,但是有一個“更多”按鈕。如果使用者點選這個“更多”按鈕,完全對話框将會出現。擴充性是由setExtension()、setOrientation()和showExtension()。
傳回值(模式對話框)
模式對話框通常用在需要傳回值的地方,例如需要厘清使用者按下“OK”還是“Cancel”。對話框可以通過調用accept()或reject()槽來被關閉,并且exec()将傳回适當的Accepted或Rejected。exec()傳回這個對話框的結果。如果視窗還沒有被銷毀,這個結果也可以通過result()得到。如果WDestructiveClose标記被設定,那麼當exec()傳回時,對話框被删除。
執行個體
模式對話框。
QFileDialog *dlg = new QFileDialog( workingDirectory,
QString::null, 0, 0, TRUE );
dlg->setCaption( QFileDialog::tr( "Open" ) );
dlg->setMode( QFileDialog::ExistingFile );
QString result;
if ( dlg->exec() == QDialog::Accepted ) {
result = dlg->selectedFile();
workingDirectory = dlg->url();
}
delete dlg;
return result;
非模式對話框。在show()調用之後,控制傳回到主事件循環中。
int main( int argc, char **argv )
{
QApplication a( argc, argv );
int scale = 10;
LifeDialog *life = new LifeDialog( scale );
a.setMainWidget( life );
life->setCaption("Qt Example - Life");
life->show();
return a.exec();
}
半模式對話框的執行個體請參考QProgressDialog文檔。
請參考QTabDialog、QWidget、QProgressDialog、GUI Design Handbook: Dialogs, Standard、抽象視窗部件類和對話框類。
成員類型文檔
QDialog::DialogCode
模式對話框傳回的值。
- QDialog::Accepted
- QDialog::Rejected
成員函數文檔
QDialog::QDialog ( QWidget * parent = 0, const char * name = 0, bool modal = FALSE, WFlags f = 0 )
構造一個父對象為 parent 、名稱為 name 的對話框。
如果modal為假(預設),這個對話框是非模式的并且應該使用show()來被顯示。如果modal為真,這個對話框使用exec()來被顯示,則它是模式的,也就是說會阻塞這個應用程式中其它視窗的輸入。如果modal為真并且使用show()來被顯示,則它是半模式的。
視窗部件f将被傳遞給QWidget的構造函數。
如果,例如,我們不想要對話框的标題欄中“這是什麼”按鈕,在f中傳遞WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu。
我們建議你傳遞一個非空的父對象。
請參考QWidget::setWFlags()和Qt::WidgetFlags。
QDialog::~QDialog ()
銷毀這個對話框,删除它所有的子對象。
void QDialog::accept () [虛 保護 槽]
隐藏模式對話框并且設定結果代碼為 Accepted 。
請參考reject()和done()。
執行個體:chart/setdataform.cpp。
void QDialog::done ( int r ) [虛 保護 槽]
隐藏模式對話框并且設定結果代碼為 r 。這将使用本地事件循環來完成,并且 exec ()傳回 r 。
如果對話框使用WDestructiveClose來被設定,done()也會銷毀這個對話框。如果對話框是應用程式的主視窗部件,那麼應用程式終止。
請參考accept()、reject()、QApplication::mainWidget()和QApplication::quit()。
int QDialog::exec () [槽]
執行模式對話框。控制傳遞給這個對話框一直到使用者關閉它,在本地事件循環完成的點并且函數傳回 DialogCode 結果。在使用者關閉這個對話框之前,不能和同一應用程式中的其它視窗互動。對于非模式或半模式對話框請使用 show ()。
請參考show()和result()。
執行個體:chart/chartform.cpp、i18n/main.cpp、network/networkprotocol/view.cpp、a href="qdir-example.html#x1805" target="_blank" rel="external nofollow" >qdir/qdir.cpp、showimg/showimg.cpp和wizard/main.cpp。
QWidget * QDialog::extension () const
傳回對話框的擴充或者如果沒有擴充被定義傳回0。
請參考setExtension()。
bool QDialog::isSizeGripEnabled () const
如果大小控制生效,傳回真,否則傳回假。詳細情況請參考“sizeGripEnabled”屬性。
Orientation QDialog::orientation () const
傳回對話框的擴充方向。
請參考setOrientation()。
void QDialog::reject () [虛 保護 槽]
隐藏模式對話框并且設定結果代碼為 Rejected 。
請參考accept()和done()。
int QDialog::result () const
傳回模式對話框的結果代碼,Accepted或Rejected。
如果對話框使用WDestructiveClose标記構造,不要調用這個函數。(無論如何,exec()傳回結果代碼。)
void QDialog::setExtension ( QWidget * extension )
設定視窗部件 extension 為對話框的擴充,删除任何以前的擴充。對話框擁有擴充的所有權。注意如果傳遞0,則任何存在的擴充都将被删除。
隻有當對話框被隐藏時,這個函數才能被調用。
請參考showExtension()、setOrientation()和extension()。
void QDialog::setOrientation ( Orientation orientation )
如果 orientation 是 Horizontal ,擴充将會顯示在對話框主區域的右面。如果 orientation 是 Vertical ,擴充将會顯示在對話框主區域的下面。
請參考orientation()和setExtension()。
void QDialog::setResult ( int i ) [保護]
設定模式對話框的結果代碼為i。
void QDialog::setSizeGripEnabled ( bool )
設定大小控制是否生效。詳細情況請參考“sizeGripEnabled”屬性。
void QDialog::show () [虛]
顯示非模式或半模式對話框。控制立即傳回到調用代碼中。
對話框沒有一個本地事件循環,是以你必須定時地調用QApplication::processEvents()來使對話框能夠得到處理它的事件的機會。
如果在構造函數中,模式标記被設定為真,對話框将為半模式。
警告:
在Qt 2.x中,在一個模式對話框中調用show()進入一個本地事件循環并且像exec()一樣工作,但是不傳回exec()所傳回的結果代碼。Trolltech已經一直警告這樣做是不被建議的。
請參考exec()。
執行個體:movies/main.cpp、showimg/showimg.cpp和sql/overview/form1/main.cpp。
從QWidget中重新實作的。
void QDialog::showExtension ( bool showIt ) [保護 槽]
如果 showIt 為真,對話框的擴充被顯示,否則擴充被隐藏。
這個槽通常被連接配接到QPushButton的QButton::toggled()信号上。
如果對話框不是可視的,或者沒有擴充,則什麼都不會發生。
請參考show()、setExtension()和setOrientation()。
屬性文檔
bool sizeGripEnabled
這個屬性儲存的是大小控制是否生效。
當這個屬性生效時,QSizeGrip被放置到對話框的右下角。預設情況下,大小控制失效。
通過setSizeGripEnabled()設定屬性值并且通過isSizeGripEnabled()來獲得屬性值。