QDialog类

Qt 3.0.5

主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数

QDialog类参考

QDialog类是对话框窗口的基类。 详情请见……

#include <qdialog.h>

继承了QWidget

QColorDialogQErrorMessageQFileDialogQFontDialogQInputDialogQMessageBoxQProgressDialogQTabDialogQWizard继承。

所有成员函数的列表。

公有成员

公有槽

属性

保护成员

保护槽


详细描述

QDialog类是对话框窗口的基类。

对话框窗口是主要用于短期任务以及和用户进行简要通讯的顶级窗口。QDialog可以是模式的也可以是非模式的。QDialog支持扩展性并且可以提供返回值。它们可以有默认按钮。QDialog也可以有一个QSizeGrip在它的右下角,使用setSizeGripEnabled()。

注意QDialog使用父窗口部件的方法和Qt中其它类稍微不同。对话框总是顶级窗口部件,但是如果它有一个父对象,它的默认位置就是父对象的中间。它也将和父对象共享工具条条目。

这里有三种有用的对话框:

  1. 模式对话框就是阻塞同一应用程序中其它可视窗口的输入的对话框:用户必须完成这个对话框中的交互操作并且关闭了它之后才能访问应用程序中的其它任何窗口。模式对话框有它们自己的本地事件循环。用来让用户选择一个文件或者用来设置应用程序参数的对话框通常是模式的。调用exec()来显示模式对话框。当用户关闭这个对话框,exec()将提供一个可用的返回值并且这时流程控制继续从调用exec()的地方进行。通常,我们连接默认按钮,例如“OK”到accept()槽并且把“Cancel”连接到reject()槽,来使对话框关闭并且返回适当的值。另外我们也可以连接done()槽,传递给它AcceptedRejected

  2. 非模式对话框是和同一个程序中其它窗口操作无关的对话框。在字处理软件中查找和替换对话框通常是非模式的来允许同时与应用程序主窗口和对话框进行交互。调用show()来显示非模式对话框。show()立即返回,这样调用代码中的控制流将会继续。在实践中你将会经常调用show()并且在调用show()的函数最后,控制返回主事件循环。

  3. 半模式”对话框是立即把控制返回给调用者的模式对话框。半模式对话框没有它们自己的事件循环,所以你将需要周期性地调用QApplication::processEvents()来让这个半模式对话框有处理它的事件的机会。进程对话框(例如QProgressDialog)就是一个实例,在你想让用户能够和进程对话框交互的地方那个,例如撤销一个长期运行的操作,但是需要实际上执行这个操作。半模式对话框模式标记被设置为真并且调用show()函数来被显示。

默认按钮

对话框的“默认”按钮适当用户按下回车键或者换行键时被按下的按钮。这个按钮用来表示用户接受对话框的设置并且希望关闭这个对话框。使用QPushButton::setDefault()、QPushButton::isDefault()和QPushButton::autoDefault()来设置并且控制对话框的默认按钮。

扩展性

扩展性是可以用两种方式来显示对话框:一个局部对话框用来显示通常最常用的选项,和一个显示所有选项的完全对话框。通常可扩展的对话框将初始化为一个局部对话框,但是有一个“更多”按钮。如果用户点击这个“更多”按钮,完全对话框将会出现。扩展性是由setExtension()、setOrientation()和showExtension()。

返回值(模式对话框)

模式对话框通常用在需要返回值的地方,例如需要分清用户按下“OK”还是“Cancel”。对话框可以通过调用accept()或reject()槽来被关闭,并且exec()将返回适当的AcceptedRejected。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文档。

请参考QTabDialogQWidgetQProgressDialogGUI 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.cppi18n/main.cppnetwork/networkprotocol/view.cpp、a href="qdir-example.html#x1805">qdir/qdir.cpp、showimg/showimg.cppwizard/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

返回模式对话框的结果代码,AcceptedRejected

如果对话框使用WDestructiveClose标记构造,不要调用这个函数。(无论如何,exec()返回结果代码。)

void QDialog::setExtension ( QWidget * extension )

设置窗口部件extension为对话框的扩展,删除任何以前的扩展。对话框拥有扩展的所有权。注意如果传递0,则任何存在的扩展都将被删除。

只有当对话框被隐藏时,这个函数才能被调用。

请参考showExtension()、setOrientation()和extension()。

void QDialog::setOrientation ( Orientation orientation )

如果orientationHorizontal,扩展将会显示在对话框主区域的右面。如果orientationVertical,扩展将会显示在对话框主区域的下面。

请参考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.cppshowimg/showimg.cppsql/overview/form1/main.cpp

QWidget中重新实现的。

void QDialog::showExtension ( bool showIt ) [保护 槽]

如果showIt为真,对话框的扩展被显示,否则扩展被隐藏。

这个槽通常被连接到QPushButtonQButton::toggled()信号上。

如果对话框不是可视的,或者没有扩展,则什么都不会发生。

请参考show()、setExtension()和setOrientation()。


属性文档

bool sizeGripEnabled

这个属性保存的是大小控制是否生效。

当这个属性生效时,QSizeGrip被放置到对话框的右下角。默认情况下,大小控制失效。

通过setSizeGripEnabled()设置属性值并且通过isSizeGripEnabled()来获得属性值。


这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。


Copyright © 2002 Trolltech Trademarks 译者:Cavendish
Qt 3.0.5版