QDialog 类

QDialog 类是对话框窗口的基类。 更多信息...

头文件 #include <QDialog>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承自 QWidget
继承

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

公共类型

枚举DialogCode { Accepted, Rejected }

属性

公共函数

QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtual~QDialog()
boolisSizeGripEnabled() const
intresult() const
voidsetModal(bool modal)
voidsetResult(int i)
voidsetSizeGripEnabled(bool)

重新实现的公共函数

virtual QSizeminimumSizeHint() const override
virtual voidsetVisible(bool visible) override
virtual QSizesizeHint() const override

公共槽

virtual voidaccept()
virtual voiddone(int r)
virtual intexec()
virtual voidopen()
virtual voidreject()

信号

voidaccepted()
voidfinished(int result)
voidrejected()

重新实现的保护函数

virtual voidcloseEvent(QCloseEvent *e) override
virtual voidcontextMenuEvent(QContextMenuEvent *e) override
virtual booleventFilter(QObject *o, QEvent *e) override
virtual voidkeyPressEvent(QKeyEvent *e) override
virtual voidresizeEvent(QResizeEvent *) override
virtual voidshowEvent(QShowEvent *event) override

详细说明

对话框是一个顶级窗口,主要用于临时任务和与用户进行简要通讯。Q对话框可以是模态的或非模态的。Q对话框可以提供返回值,并且可以有默认按钮。Q对话框还可以在它们右下角有QSizeGrip,使用setSizeGripEnabled

请注意,QDialog(以及任何类型为Qt::Dialog的其他小部件)在使用父小部件方面与其他Qt类略有不同。对话框始终是一个顶级小部件,但如果它有父级,它的默认位置将位于父级顶级小部件顶部中心(如果它自己不是顶级的话)。它还将共享父级的任务栏条目。

使用QWidget::setParent()函数的重载来更改QDialog小部件的所有权。此函数允许您显式设置重新父化小部件的窗口标志;使用重载函数将清除指定小部件(特别是将Qt::Dialog标志)窗口系统属性的窗口标志。

注意:对话框的父子关系意味着对话框始终会堆叠在父窗口之上。要保证对话框始终在最顶部,请将其设置为模态。这也适用于对话框本身的子窗口。要确保对话框的子窗口保持在对话框上方,请将这些子窗口也设置为模态。

模态对话框是一种阻止同一应用程序内其他可见窗口输入的对话框。用于从用户请求文件名或用于设置应用程序首选项的对话框通常是模态的。对话框可以是应用程序模态(默认值)或窗口模态

当打开应用程序模态对话框时,用户必须先与对话框交云并关闭它,然后才能访问应用程序中的任何其他窗口。窗口模态对话框仅阻止访问与对话框关联的窗口,允许用户继续使用应用程序中的其他窗口。

显示模态对话框最常见的方法是调用其exec()函数。当用户关闭对话框时,exec()将提供一个有用的返回值。要关闭对话框并返回适当的值,必须将默认按钮(例如一个OK按钮)连接到accept()槽,将取消按钮连接到reject()槽。或者,您可以调用done()槽,并传递AcceptedRejected

另一种选择是调用setModal(true)或setWindowModality(),然后show()。与exec()不同,show()立即将控制权返回给调用者。对于进度对话框,其中用户必须能够与对话框交互(例如,取消长时间运行的操作),调用setModal(true)特别有用。如果您使用show()和setModal(true)一起执行长时间操作,必须在处理过程中定期调用QCoreApplication::processEvents(),以便用户可以与对话框交互。(请参阅QProgressDialog。)

非模态对话框

非模态对话框是一种在应用程序中独立于其他窗口运行的对话框。在文字处理器中,查找和替换对话框通常是非模态的,以便用户可以与应用程序的主窗口和对话框进行交互。

使用show()函数显示非模态对话框,该函数返回调用者控制权。

如果在使用show()函数隐藏对话框后调用,对话框将显示在其原始位置。这是因为窗口管理器决定程序员未明确放置的窗口的位置。为了保留用户移动的对话框的位置,请在您的closeEvent()处理器中保存其位置,然后在该位置移动对话框,然后再显示它。

默认按钮

对话框的默认按钮是在用户按下Enter(回车)键时按下的按钮。此按钮用于表示用户接受对话框的设置并希望关闭对话框。使用QPushButton::setDefault()、QPushButton::isDefault()和QPushButton::autoDefault()来设置和控制对话框的默认按钮。

Esc键

如果用户在对话框中按下Esc键,将调用QDialog::reject()。这将导致窗口关闭:不能忽略关闭事件。

可扩展性

可扩展性是以两种方式显示对话框的能力:显示最常用选项的部分对话框和显示所有选项的完整对话框。通常,可扩展对话框最初会以部分对话框的形式出现,但带有更多切换按钮。如果用户按下更多按钮,对话框将被展开。

返回值(模态对话框)

模态对话框通常用于需要返回值的情况,例如指示用户是否按下了确定取消。可以通过调用accept()或reject()槽来关闭对话框,并且exec()将根据适当的情况返回AcceptedRejected。如果对话框尚未销毁,则结果也可从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();
}

具有扩展的对话框

    mainLayout->setSizeConstraint(QLayout::SetFixedSize);

    findButton = new QPushButton(tr("&Find"));
    moreButton = new QPushButton(tr("&More..."));
    moreButton->setCheckable(true);

    extension = new ExtendedControls;
    mainLayout->addWidget(extension);
    extension->hide();

    connect(moreButton, &QAbstractButton::toggled, extension, &QWidget::setVisible);

通过将对话框布局的sizeConstraint属性设置为SetFixedSize,对话框将无法被用户调整大小,当扩展被隐藏时,对话框将自动收缩。

另请参阅QDialogButtonBoxQTabWidgetQWidgetQProgressDialog标准对话框示例

成员类型文档

枚举 QDialog::DialogCode

模态对话框返回的值。

常量
QDialog::Accepted1
QDialog::Rejected0

属性文档

此属性表示show()是否应该弹出对话框作为模态或非模态。

默认情况下,此属性为falseshow()会以非模态方式弹出对话框。将此属性设置为true相当于将QWidget::windowModality设置为Qt::ApplicationModal

exec()忽略此属性的值,并始终以模态方式弹出对话框。

访问函数

boolisModal() const
voidsetModal(bool modal)

另请参阅QWidget::windowModalityshowexec

sizeGripEnabled : bool

此属性表示是否启用大小调整。

当此属性启用时,QSizeGrip将被放置在对话框的右下角。默认情况下,大小调整被禁用。

访问函数

boolisSizeGripEnabled() const
voidsetSizeGripEnabled(bool)

成员函数文档

[显式] QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

使用父级parent构建对话框。

对话框始终是一个顶层小控件,但如果它具有父级,则其默认位置位于父级的顶部中心。它还将共享父级的任务栏项。

将小控件标记f传递给QWidget构造函数。例如,如果您不希望在对话框标题栏中显示“这是什么”按钮,请将Qt::WindowTitleHint | Qt::WindowSystemMenuHint传递给f

另请参阅QWidget::setWindowFlags

[虚函数非异常] QDialog::~QDialog()

销毁QDialog,删除所有其子控件。

[虚槽] void QDialog::accept()

隐藏模态对话框并将结果显示代码设置为Accepted

另请参阅reject()和done

[信号] void QDialog::accepted()

当对话框被用户接受或者通过调用accept()或done()并用QDialog::Accepted参数调用时,此信号会被发出。

请注意,此信号在隐藏对话框使用hide()或setVisible(false)时不会发出。这包括在对话框可见时删除对话框。

另请参阅finished()和rejected

[重写虚保护] void QDialog::closeEvent(QCloseEvent *e)

重新实现:QWidget::closeEvent(QCloseEvent *event).

[重载虚拟保护] void QDialog::contextMenuEvent(QContextMenuEvent *e)

重新实现:QWidget::contextMenuEvent(QContextMenuEvent *event).

[虚拟槽] void QDialog::done(int r)

关闭对话框并将结果代码设置为 r。函数 finished() 会发出信号 r;如果 rQDialog::AcceptedQDialog::Rejected,则分别发出信号 accepted() 或 rejected()。

如果使用 exec() 显示该对话框,则 done() 也会导致本地事件循环结束,并返回 r

QWidget::close() 类似,如果设置了 Qt::WA_DeleteOnClose 标志,则 done() 会删除对话框。如果对话框是应用程序的主小部件,则应用程序会终止。如果对话框是最后一个关闭的窗口,则会发出信号 QGuiApplication::lastWindowClosed()。

另请参阅:accept(),reject(),QApplication::activeWindow() 以及 QCoreApplication::quit()。

[重载虚拟保护] bool QDialog::eventFilter(QObject *o, QEvent *e)

重新实现:QObject::eventFilter(QObject *watched, QEvent *event).

[虚拟槽] int QDialog::exec()

以模态对话框形式显示对话框,阻止用户直到关闭它。函数返回一个 DialogCode 结果。

如果对话框是 应用程序模态,则用户必须关闭对话框后才能与其他应用程序窗口交互。如果对话框是 窗口模态,则只能在对话框打开时阻止与父窗口的交互。默认情况下,对话框是应用程序模态。

注意:请避免使用此函数;而是使用 open()。与 exec() 不同,open() 是异步的,并且不会创建额外的事件循环。这可以防止一系列危险的错误(例如,在通过 exec() 打开对话框时删除对话框的父对象)发生。在调用 open() 时,您可以将连接到 QDialogfinished() 信号以接收对话框关闭时的通知。

另请参阅:open(),show(),result() 以及 setWindowModality()。

[信号] void QDialog::finished(int result)

此信号在对话框的结果码被设置时发出,无论是由用户设置还是通过调用 done(),accept() 或 reject()。

请注意,此信号在隐藏对话框使用hide()或setVisible(false)时不会发出。这包括在对话框可见时删除对话框。

另见accepted() 和 rejected

[重写虚拟受保护] void QDialog::keyPressEvent(QKeyEvent *e)

重新实现: QWidget::keyPressEvent(QKeyEvent *event)。

[重写虚拟] QSize QDialog::minimumSizeHint() const

重写了一个访问属性 QWidget::minimumSizeHint 的函数。

[虚拟槽] void QDialog::open()

以窗口模式对话框的形式显示对话框,立即返回。

另见exec(),show(),result() 和 setWindowModality

[虚拟槽] void QDialog::reject()

隐藏模式对话框并将其结果码设置为 Rejected

另见accept() 和 done

[信号] void QDialog::rejected()

当对话框被用户或通过调用 reject() 或 done() 并传入 QDialog::Rejected 参数时被拒绝时发出此信号。

请注意,此信号在隐藏对话框使用hide()或setVisible(false)时不会发出。这包括在对话框可见时删除对话框。

另见finished() 和 accepted

[重写虚拟受保护] void QDialog::resizeEvent(QResizeEvent *)

重新实现: QWidget::resizeEvent(QResizeEvent *event)。

int QDialog::result() const

通常返回模式对话框的结果码,即 AcceptedRejected

注意:当在一个 QMessageBox 实例上调用的时,返回值是一个 QMessageBox::StandardButton 枚举类型的值。

如果对话框以 Qt::WA_DeleteOnClose 属性构建,请不要调用此函数。

另见setResult

void QDialog::setResult(int i)

将模式对话框的结果码设置为 i

注意:我们建议您使用由 QDialog::DialogCode 定义的值之一。

另见result

[重写虚拟] void QDialog::setVisible(bool visible)

属性:重新实现访问函数:QWidget::visible

[重写 虚拟 保护] void QDialog::showEvent(QShowEvent *event)

重写: QWidget::showEvent(QShowEvent *event)。

[重写 虚拟] QSize QDialog::sizeHint() const

重新实现属性访问函数:QWidget::sizeHint

© 2024 Qt公司。本文件中的文档贡献版权属于各自的拥有者。提供的文档在自由软件基金会根据其条款下以GNU自由文档许可证版本1.3发布。Qt及其相关标志是芬兰及/或其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。