QDialog 类
QDialog 类是对话框窗口的基类。 更多信息...
头文件 | #include <QDialog> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承自 | QWidget |
继承 | QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, 和 QWizard |
公共类型
枚举 | DialogCode { Accepted, Rejected } |
属性
- modal : bool
- sizeGripEnabled : bool
公共函数
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() |
信号
重新实现的保护函数
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 |
详细说明
对话框是一个顶级窗口,主要用于临时任务和与用户进行简要通讯。Q对话框可以是模态的或非模态的。Q对话框可以提供返回值,并且可以有默认按钮。Q对话框还可以在它们右下角有QSizeGrip,使用setSizeGripEnabled。
请注意,QDialog(以及任何类型为Qt::Dialog
的其他小部件)在使用父小部件方面与其他Qt类略有不同。对话框始终是一个顶级小部件,但如果它有父级,它的默认位置将位于父级顶级小部件顶部中心(如果它自己不是顶级的话)。它还将共享父级的任务栏条目。
使用QWidget::setParent()函数的重载来更改QDialog小部件的所有权。此函数允许您显式设置重新父化小部件的窗口标志;使用重载函数将清除指定小部件(特别是将Qt::Dialog标志)窗口系统属性的窗口标志。
注意:对话框的父子关系不意味着对话框始终会堆叠在父窗口之上。要保证对话框始终在最顶部,请将其设置为模态。这也适用于对话框本身的子窗口。要确保对话框的子窗口保持在对话框上方,请将这些子窗口也设置为模态。
模态对话框
模态对话框是一种阻止同一应用程序内其他可见窗口输入的对话框。用于从用户请求文件名或用于设置应用程序首选项的对话框通常是模态的。对话框可以是应用程序模态(默认值)或窗口模态。
当打开应用程序模态对话框时,用户必须先与对话框交云并关闭它,然后才能访问应用程序中的任何其他窗口。窗口模态对话框仅阻止访问与对话框关联的窗口,允许用户继续使用应用程序中的其他窗口。
显示模态对话框最常见的方法是调用其exec()函数。当用户关闭对话框时,exec()将提供一个有用的返回值。要关闭对话框并返回适当的值,必须将默认按钮(例如一个OK按钮)连接到accept()槽,将取消按钮连接到reject()槽。或者,您可以调用done()槽,并传递Accepted
或Rejected
。
另一种选择是调用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()将根据适当的情况返回Accepted
或Rejected
。如果对话框尚未销毁,则结果也可从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,对话框将无法被用户调整大小,当扩展被隐藏时,对话框将自动收缩。
另请参阅QDialogButtonBox、QTabWidget、QWidget、QProgressDialog和标准对话框示例。
属性文档
modal : bool
此属性表示show()是否应该弹出对话框作为模态或非模态。
默认情况下,此属性为false
,show()会以非模态方式弹出对话框。将此属性设置为true相当于将QWidget::windowModality设置为Qt::ApplicationModal。
exec()忽略此属性的值,并始终以模态方式弹出对话框。
访问函数
bool | isModal() const |
void | setModal(bool modal) |
另请参阅QWidget::windowModality、show和exec。
sizeGripEnabled : bool
此属性表示是否启用大小调整。
当此属性启用时,QSizeGrip将被放置在对话框的右下角。默认情况下,大小调整被禁用。
访问函数
bool | isSizeGripEnabled() const |
void | setSizeGripEnabled(bool) |
成员函数文档
[显式]
QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
使用父级parent构建对话框。
对话框始终是一个顶层小控件,但如果它具有父级,则其默认位置位于父级的顶部中心。它还将共享父级的任务栏项。
将小控件标记f传递给QWidget构造函数。例如,如果您不希望在对话框标题栏中显示“这是什么”按钮,请将Qt::WindowTitleHint | Qt::WindowSystemMenuHint传递给f。
[虚函数非异常]
QDialog::~QDialog()
销毁QDialog,删除所有其子控件。
[虚槽]
void QDialog::accept()
隐藏模态对话框并将结果显示代码设置为Accepted
。
[信号]
void QDialog::accepted()
当对话框被用户接受或者通过调用accept()或done()并用QDialog::Accepted参数调用时,此信号会被发出。
请注意,此信号在隐藏对话框使用hide()或setVisible(false)时不会发出。这包括在对话框可见时删除对话框。
[重写虚保护]
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;如果 r 是 QDialog::Accepted 或 QDialog::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() 时,您可以将连接到 QDialog 的 finished() 信号以接收对话框关闭时的通知。
另请参阅:open(),show(),result() 以及 setWindowModality()。
[信号]
void QDialog::finished(int result)
此信号在对话框的结果码被设置时发出,无论是由用户设置还是通过调用 done(),accept() 或 reject()。
请注意,此信号在隐藏对话框使用hide()或setVisible(false)时不会发出。这包括在对话框可见时删除对话框。
[重写虚拟受保护]
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
。
[信号]
void QDialog::rejected()
当对话框被用户或通过调用 reject() 或 done() 并传入 QDialog::Rejected 参数时被拒绝时发出此信号。
请注意,此信号在隐藏对话框使用hide()或setVisible(false)时不会发出。这包括在对话框可见时删除对话框。
[重写虚拟受保护]
void QDialog::resizeEvent(QResizeEvent *)
重新实现: QWidget::resizeEvent(QResizeEvent *event)。
int QDialog::result() const
通常返回模式对话框的结果码,即 Accepted
或 Rejected
。
注意:当在一个 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公司的商标。所有其他商标均为其各自所有者的财产。