Qt 的内置对话框大致分为以下几类:
QFileDialog
:选择文件或者目录;QFontDialog
:选择字体;QInputDialog
:允许用户输入一个值,并将其值返回;QMessageBox
:模态对话框,用于显示信息、询问问题等;QPageSetupDialog
:为打印机提供纸张相关的选项;QPrintDialog
:打印机配置;QPrintPreviewDialog
:打印预览;QProgressDialog
:显示操作过程。
这里我们简单地介绍一下标准对话框QMessageBox
的使用。在前面有了关于对话框的基础之上,应该可以结合文档很轻松地学习如何使用 Qt 的标准对话框。其它种类的标准对话框,我们将在后面的章节中再一一介绍。
QMessageBox
用于显示消息提示。我们一般会使用其提供的几个 static 函数:
void about(QWidget * parent, const QString & title, const QString & text)
:显示关于对话框。这是一个最简单的对话框,其标题是 title,内容是 text,父窗口是 parent。对话框只有一个 OK 按钮。- :显示关于 Qt 对话框。该对话框用于显示有关 Qt 的信息。
StandardButton information(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
:QMessageBox::information()
函数与QMessageBox::critical()
类似,不同之处在于这个对话框提供一个普通信息图标。StandardButton question(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)
:QMessageBox::question()
函数与QMessageBox::critical()
类似,不同之处在于这个对话框提供一个问号图标,并且其显示的按钮是“是”和“否”两个。StandardButton warning(QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
:QMessageBox::warning()
函数与QMessageBox::critical()
类似,不同之处在于这个对话框提供一个黄色叹号图标。
我们可以通过下面的代码来演示下如何使用。
QMessageBox
类的 static 函数优点是方便使用,缺点也很明显:非常不灵活。我们只能使用简单的几种形式。为了能够定制QMessageBox
细节,我们必须使用QMessageBox
的属性设置 API。如果我们希望制作一个询问是否保存的对话框,我们可以使用如下的代码:
- QMessageBox msgBox;
- msgBox.setText(tr("The document has been modified."));
- msgBox.setInformativeText(tr("Do you want to save your changes?"));
- msgBox.setDetailedText(tr("Differences here..."));
- msgBox.setStandardButtons(QMessageBox::Save
- | QMessageBox::Discard
- | QMessageBox::Cancel);
- int ret = msgBox.exec();
- switch (ret) {
- case QMessageBox::Save:
- qDebug() << "Save document!";
- break;
- case QMessageBox::Discard:
- qDebug() << "Discard changes!";
- break;
- case QMessageBox::Cancel:
- qDebug() << "Close document!";
- }
同时在 KDE 和 Windows 7 上编译运行一下上面的代码,我们可以看到一些区别:
除去对话框样式,我们值得注意的是QMessageBox
下方按钮的排列顺序。KDE 上是 Show Details…、Save、Discard 和 Cancel;而 Windows 7 上则是 Save、Discard、Show Details… 和 Cancel。我们并没有指定按钮的顺序,Qt 已经帮我们按照不同平台的使用习惯对其进行了调整。这一点在 Mac OS 上也会有相应的体现。对于一个普通的QDialog
而言,Qt 使用的是这个类来实现不同平台的对话框按钮顺序的显示的。更多细节请参考这个类的文档。