QDialog类是对话框窗口的基类。
头文件:#include
qmake:QT += widgets
继承:QWidget
被继承:QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialog, and QWizard
对话窗口是顶级窗口,主要用于短期任务和与用户的简短通信。 QDialogs可能是模态的或无模式的。 QDialogs可以提供返回值,它们可以有默认按钮。 QDialogs也可以使用setSizeGripEnabled()在其右下角有一个QSizeGrip。
请注意,QDialog(以及具有Qt :: Dialog类型的任何其他窗口小部件)使用父窗口小部件与Qt中的其他类略有不同。 对话框始终是顶级窗口小部件,但如果它具有父窗口,则其默认位置居中于父级顶级窗口小部件的顶部(如果它不是顶级窗口小部件)。 它还将共享父级的任务栏条目。
使用QWidget :: setParent()函数的重载来更改QDialog小部件的所有权。 此函数允许您显式设置重新定义的窗口小部件的窗口标志; 使用重载函数将清除窗口标志,指定窗口小部件的窗口系统属性(特别是它将重置Qt :: Dialog标志)。
模态对话框
模态对话框是一个对话框,用于阻止同一应用程序中其他可见窗口的输入。 用于从用户请求文件名或用于设置应用程序首选项的对话框通常是模态的。 对话框可以是应用程序模式(默认)或窗口模式。
打开应用程序模式对话框时,用户必须完成与对话框的交互并关闭它,然后才能访问应用程序中的任何其他窗口。 窗口模式对话框仅阻止访问与对话框关联的窗口,允许用户继续使用应用程序中的其他窗口。
显示模式对话框的最常用方法是调用其exec()函数。 当用户关闭对话框时,exec()将提供有用的返回值。 通常,要使对话框关闭并返回适当的值,我们会连接一个默认按钮,例如 好的,到accept()插槽和拒绝()插槽的取消按钮。 或者,您可以使用Accepted或Rejected调用done()槽。
另一种方法是调用setModal(true)或setWindowModality(),然后调用show()。 与exec()不同,show()立即将控制权返回给调用者。 调用setModal(true)对于进度对话框特别有用,其中用户必须能够与对话框进行交互,例如, 取消长时间运行的操作。 如果同时使用show()和setModal(true)执行长操作,则必须在处理期间定期调用QApplication :: processEvents()以使用户能够与对话框进行交互。 (见QProgressDialog。)
无模式对话框
无模式对话框是一个独立于同一应用程序中其他窗口的对话框。 在字处理器中查找和替换对话框通常是无模式的,以允许用户与应用程序的主窗口和对话框进行交互。
使用show()显示无模式对话框,它会立即将控制权返回给调用者。
如果在隐藏对话框后调用show()函数,则对话框将显示在其原始位置。 这是因为窗口管理器决定程序员未明确放置的窗口的位置。 要保留用户移动的对话框的位置,请将其位置保存在closeEvent()处理程序中,然后将对话框移动到该位置,然后再显示该对话框。
默认按钮
对话框的默认按钮是用户按Enter(返回)时按下的按钮。 此按钮用于表示用户接受对话框的设置并希望关闭对话框。 使用QPushButton :: setDefault(),QPushButton :: isDefault()和QPushButton :: autoDefault()来设置和控制对话框的默认按钮。
退出键
如果用户在对话框中按下Esc键,将调用QDialog :: reject()。 这将导致窗口关闭:关闭事件不能被忽略。
可扩展性
可扩展性是以两种方式显示对话框的能力:显示最常用选项的部分对话框,以及显示所有选项的完整对话框。 通常,可扩展对话框最初将显示为部分对话框,但具有“更多”切换按钮。 如果用户按下“更多”按钮,则会展开对话框。 扩展示例显示了如何使用Qt实现可扩展对话框。
返回值(模态对话框)
模态对话框通常用于需要返回值的情况,例如: 指示用户是按下确定还是取消。 可以通过调用accept()或reject()槽来关闭对话框,exec()将根据需要返回Accepted或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 |
二、属性文档
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 = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
构造父父对话框。
对话框始终是顶级窗口小部件,但如果它具有父窗口,则其默认位置以父窗体为中心。 它还将共享父级的任务栏条目。
小部件标志f被传递给QWidget构造函数。 例如,如果您不想在对话框的标题栏中显示“这是什么”按钮,请传递Qt :: WindowTitleHint | ft :: WindowSystemMenuHint in f。
另请参见QWidget :: setWindowFlags()。
QDialog::~QDialog()
销毁QDialog,删除其所有孩子。
[virtual slot] void QDialog::accept()
隐藏模态对话框并将结果代码设置为Accepted。
另请参见reject()和done()。
[signal] void QDialog::accepted()
当用户接受对话框或通过使用QDialog :: Accepted参数调用accept()或done()时,将发出此信号。
请注意,使用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()一样,如果设置了Qt :: WA_DeleteOnClose标志,done()将删除该对话框。 如果对话框是应用程序的主窗口小部件,则应用程序将终止。 如果对话框是最后一个窗口关闭,则发出QApplication :: lastWindowClosed()信号。
[virtual protected] bool QDialog::event(QEvent *e)
从QObject :: event()重新实现。
[virtual protected] bool QDialog::eventFilter(QObject *o, QEvent *e)
从QObject :: eventFilter()重新实现。
[virtual slot] int QDialog::exec()
将对话框显示为模式对话框,阻止直到用户关闭它。 该函数返回DialogCode结果。
如果对话框是应用程序模式,则用户在关闭对话框之前无法与同一应用程序中的任何其他窗口进行交互。 如果对话框是窗口模式,则在对话框打开时仅阻止与父窗口的交互。 默认情况下,对话框是应用程序模式。
[signal] void QDialog::finished(int result)
当用户或通过调用done(),accept()或reject()设置对话框的结果代码时,将发出此信号。
请注意,使用hide()或setVisible(false)隐藏对话框时不会发出此信号。 这包括在对话框可见时删除对话框。注意在使用hide()或setVisible(false)隐藏对话框时不会发出此信号。 这包括在对话框可见时删除对话框。
该函数在Qt 4.1中引入。
[virtual protected] void QDialog::keyPressEvent(QKeyEvent *e)
从QWidget :: keyPressEvent()重新实现。
[virtual] QSize QDialog::minimumSizeHint() const
从QWidget :: minimumSizeHint()重新实现。
[virtual slot] void QDialog::open()
将对话框显示为窗口模式对话框,立即返回。
该函数在Qt 4.5中引入。
[virtual slot] void QDialog::reject()
隐藏模态对话框并将结果代码设置为已拒绝。
[signal] void QDialog::rejected()
当用户拒绝对话框或使用QDialog :: Rejected参数调用reject()或done()时,将发出此信号。
请注意,使用hide()或setVisible(false)隐藏对话框时不会发出此信号。 这包括在对话框可见时删除对话框。
该函数在Qt 4.1中引入。
[virtual protected] void QDialog::resizeEvent(QResizeEvent *)
从QWidget :: resizeEvent()重新实现。
int QDialog::result() const
通常返回模态对话框的结果代码,Accepted或Rejected。
注意:在QMessageBox实例上调用时,返回的值是QMessageBox :: StandardButton枚举的值。
如果对话框是使用Qt :: WA_DeleteOnClose属性构造的,请不要调用此函数。
void QDialog::setResult(int i)
将模态对话框的结果代码设置为i。
注意:我们建议您使用QDialog :: DialogCode定义的值之一。
[virtual] void QDialog::setVisible(bool visible)
从QWidget :: setVisible()重新实现。
[virtual protected] void QDialog::showEvent(QShowEvent *event)
从QWidget :: showEvent()重新实现。
[virtual] QSize QDialog::sizeHint() const
从QWidget :: sizeHint()重新实现。