Qt 4开发实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第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对话框的右边的标签中。