第5章 基本对话框
本章通过一个实例详细介绍基本对话框的使用方法,首先介绍标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)以及消息对话框(QMessageBox),运行效果如图5.1所示。以上代码实现详见CH501。
图5.1 标准基本对话框实例
本章的后面还介绍了QToolBox类的使用、进度条的用法、QPalette类的用法、QTime类的用法和mousePressEvent/mouseMoveEvent类的用法、可扩展对话框的基本实现方法、不规则窗体的实现、程序启动画面(QSplashScreen)的使用、多文档的创建方法以及使用Qt Designer设计对话框的系统说明。
在图5.1中:
(1) 单击“文件标准对话框实例”按钮,弹出文件选择对话框,如图5.2所示。选中的文件名所在目录路径将显示在右边的标签中。
图5.2 文件标准对话框实例
(2) 单击“颜色标准对话框实例”按钮,弹出颜色选择对话框,如图5.3所示。选中的颜色将显示在右边的标签中。
图5.3 颜色标准对话框实例
(3) 单击“字体标准对话框实例”按钮,弹出字体选择对话框,如图5.4所示。选中的字体将更新右边显示的字符串。
图5.4 字体标准对话框实例
(4) 标准输入对话框包括,标准字符串输入对话框、标准条目选择对话框、标准int类型输入对话框和标准double类型输入对话框。
单击“标准输入对话框实例”按钮,弹出标准输入对话框实例的对话框,如图5.5(a)所示。其中,标准输入对话框实例中,若是调用字符串输入框,则为一个QLineEdit,如图5.5(b)所示;若是调用列表条目输入框,则为一个QComboBox,如图5.5(c)所示;若是调用int类型或double类型输入框,则为一个QSpinBox,如图5.5(d)和图5.5(e)所示。最后,还应该包括一个确定输入(“OK”)按钮和一个取消输入(“Cancel”)按钮。
图5.5 标准输入对话框实例
(5) 单击“标准消息对话框实例”按钮,弹出标准消息对话框实例的对话框,如图5.6(a)所示。标准消息对话框包括Question消息框(如图5.6(b)所示)、Information消息框(如图5.6(c)所示)、Warning消息框(如图5.6(d)所示)、Critical消息框(如图5.6(e)所示)、About消息框(如图5.6(f)所示)和About Qt消息框(如图5.6(g)所示)。
图5.6 标准消息对话框实例
(6) 如果以上所有的标准消息框都不能满足开发的需求,此处还介绍了Qt允许的Custom(自定义)消息框的使用方法。单击“用户自定义消息对话框实例”按钮,弹出用户自定义消息对话框实例的对话框,如图5.7所示。
图5.7 用户自定义消息对话框实例
各种基本对话框通过调用各自不同的静态函数来完成其功能。具体说明如表5.1所示。
表5.1 标准基本对话框所需的静态函数
下面首先介绍如何完成图5.1所示的界面显示。具体操作步骤如下:
(1) 创建一个工程,单击“File”->“New File or Project...”,在弹出的对话框中选择Projects组下的“Qt4 Gui Application”选项,单击“OK”按钮。
(2) 弹出“Qt4 Gui Application”对话框,在“Name”后面的文本框中输入DialogExample以及选择保存该文件的路径,单击“Next”按钮;再次单击“Next”按钮,在Class name后面的文本框中输入Dialog,在基类Base class后面的下列列表框中选择QDialog,取消“Generate form”复选框的选中状态,单击“Next”按钮;最后单击“Finish”按钮,完成该文件工程的建立。
需要注意的是:
(1) 在dialog.cpp文件中的Dialog的构造函数中应该加上:
setWindowTitle(tr("各种标准对话框的实例"));
显示该工程的对话框标题。
(2) 在main.cpp文件中的main()函数中应该加上:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
以及添加头文件:
#include <QTextCodec>
以便能够显示中文。
以下的所有程序中都是用到哪个Qt类库时,都要将该类所在的库文件包括到该工程中。不再重复说明。
下面5.1节到5.6节中的例子都在同一个工程DialogExample.pro中。下面添加的代码是依次进行的。
5.1 标准文件对话框:QFileDialog类
5.1.1 函数说明
QFileDialog类有几个静态函数如表5.1所示,用户通过这些函数可以很方便地定制自己的文件对话框。其中getOpenFileName()函数返回用户选择的文件名。但是当用户在选择文件时,如果选择“取消”(Cancel),则返回一个空串。在此只详细说明getOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。其函数形式如下:
QString QFileDialog::getOpenFileName ( QWidget* parent=0, //标准文件对话框的父窗口 const QString & caption=QString(), //标准文件对话框的标题名 const QString & dir=QString(), //注(1) const QString & filter=QString(), //注(2) QString * selectedFilter=0, //用户选择的过滤器通过此参数返回 Options options=0 //选择显示文件名的格式,默认是同时显示目录与文件名 )
注1.指定了默认的目录,若此参数带有文件名,则文件将是默认选中的文件。
2.此参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,可以同时指定多种过滤方式供用户选择,多种过滤器之间用“::”隔开。
5.1.2 创建步骤
下面是创建一个标准文件对话框的详细步骤:
(1) 在dialog.h中,添加private成员变量如下:
QPushButton *fileBtn; QLineEdit *fileLineEdit; QGridLayout *mainLayout;
(2) 添加private slots槽函数:
void showFile();
在开始部分添加头文件:
#include <QLineEdit> #include <QGridLayout>
(3) 在dialog.cpp文件中的构造函数中添加代码如下:
fileBtn=new QPushButton; //各个控件对象的初始化 fileBtn->setText(tr("文件标准对话框实例")); fileLineEdit=new QLineEdit; //用来显示选择的文件名
以及添加布局管理:
mainLayout=new QGridLayout(this); //布局设计 mainLayout->addWidget(fileBtn,0,0); mainLayout->addWidget(fileLineEdit,0,1);
最后添加事件关联:
connect(fileBtn,SIGNAL(clicked()),this,SLOT(showFile())); //事件关联
其中,槽函数showFile()的具体实现代码如下:
void Dialog::showFile() { QString s = QFileDialog::getOpenFileName(this,"open file dialog","/", "C++ files(*.cpp)::C files(*.c)::Head files(*.h)"); fileLineEdit->setText(s); }
在dialog.cpp文件的开始部分添加头文件:
#include<QGridLayout> #include<QFileDialog> #include<QPushButton>
(4) 运行该程序后,点击“文件标准对话框实例”按钮后显示图5.2。选择某一文件,单击“打开”按钮,此文件名以及其所在目录将显示在Dialog对话框的右边的标签中。