天天看点

Qt 中的对话框

文章目录

      • 1. 颜色对话框
      • 2. 字体对话框
      • 3. 文件对话框
          • 3.1 打开文件对话框 -------- 获取文件所在绝对路径
          • 3.2 保存文件对话框 -------- 获取文件所在绝对路径
          • 3.3 打开文件夹对话框 -------- 获取文件夹所在绝对路径
      • 4. 进度对话框
      • 5. 输入对话框
      • 6. 向导对话框

Qt 中有很多我们眼熟的对话框,比如这个:

Qt 中的对话框

再比如这个

Qt 中的对话框

还有这个:

Qt 中的对话框

这些都是我们日常生活中使用电脑经常会看到的对话框,本文就来讨论一下如何使用这些对话框。

1. 颜色对话框

这个就是上面贴的最后一个图啦,具体实现过程如下:

首先导入相应的头文件

然后呢调用它的静态方法就可以了:

[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, 
										QWidget *parent = Q_NULLPTR, 
										const QString &title = QString(), 
										ColorDialogOptions options = ColorDialogOptions());
           

关于上面的参数呢,解释如下:

@param initial : 默认选中什么颜色
@param parent : 父窗口
@param title : 弹出窗口的标题
@param options : 可选参数,不填即可
           

这个函数的返回值是 QColor ,刚好可以用于设置画笔等的颜色样式,示例如下:

QPen pen;
	QColor color = QColorDialog::getColor(Qt::black, this);
    pen.setColor(color);
           

2. 字体对话框

这个其实和上面是一样的,

首先导入相应的头文件

然后调用它的静态方法就可以了:

[static] QFont QFontDialog::getFont(bool *ok, 
									const QFont &initial, 
									QWidget *parent = Q_NULLPTR, 
									const QString &title = QString(), 
									FontDialogOptions options = FontDialogOptions());
           

关于上面的参数,解释如下:

@param ok: 用户在弹出窗口点击了哪个按钮。
			如果用户点击 OK, 那么选中的字体样式将会被返回;
			如果用户点击 Cancel, 那么默认字样将会被返回。
@param initial: 默认字体样式
@param parent : 父窗口
@param title : 弹出窗口的标题
@param options : 可选参数,不填即可
           

这个函数的返回值是 QFont,使用示例如下:

bool ok;
	QFont font = QFontDialog::getFont(&ok, QFont( "Helvetica [Cronyx]", 10 ), this);

	// 这一行和上一行的效果是一样的
    //QFont font = QFontDialog::getFont(NULL, QFont( "Helvetica [Cronyx]", 10 ), this);
    
    qDebug() << font;
           

3. 文件对话框

我们所熟悉的选择文件并打开,其实对话框只做了第一件事 ---- 选择文件。

当用户选中文件并点击 “打开” 的时候,对话框将这个文件所在的绝对路径返回,然后程序根据这个路径将文件打开。

所以我们可以使用这个文件对话框实现同样的功能,首先导入对应的头文件:

然后就根据需要来选择相应的函数接口了:

3.1 打开文件对话框 -------- 获取文件所在绝对路径

用到的函数接口:

[static] QString QFileDialog::getOpenFileName(QWidget *parent = Q_NULLPTR, 
											const QString &caption = QString(), 
											const QString &dir = QString(), 
											const QString &filter = QString(), 
											QString *selectedFilter = Q_NULLPTR, 
											Options options = Options());

[static] QStringList QFileDialog::getOpenFileNames(QWidget *parent = Q_NULLPTR, 
											const QString &caption = QString(), 
											const QString &dir = QString(), 
											const QString &filter = QString(), 
											QString *selectedFilter = Q_NULLPTR, 
											Options options = Options());
           

这两个函数其实从名字就能看出区别,前者是用于获取一个文件的所在绝对路径,而后者是用于获取多个文件所在的绝对路径。参数说明如下:

@param parent 			: 父窗口
@param caption 			: 弹出的窗口标题
@param dir 				: 默认打开路径
@param filter 			: 过滤条件,过滤的是文件类型
@param selectedFilter 	: 当前的过滤条件
@param options 			: 可选参数,不填即可
           

使用示例:

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                      "/home",
                                                      tr("Images (*.png *.xpm *.jpg)"));
           

效果图:

Qt 中的对话框

当然了,若是过滤条件有多个,则在字符串中以 ;; 隔开,like this:

3.2 保存文件对话框 -------- 获取文件所在绝对路径

用到的函数接口:

[static] QString QFileDialog::getSaveFileName(QWidget *parent = Q_NULLPTR, 
											const QString &caption = QString(), 
											const QString &dir = QString(), 
											const QString &filter = QString(), 
											QString *selectedFilter = Q_NULLPTR, 
											Options options = Options());

[static] QStringList QFileDialog::getSaveFileNames(QWidget *parent = Q_NULLPTR, 
											const QString &caption = QString(), 
											const QString &dir = QString(), 
											const QString &filter = QString(), 
											QString *selectedFilter = Q_NULLPTR, 
											Options options = Options());
           

简直和上面的函数一毛一样,就不过多解释了,直接看

使用示例:

QString fileName = QFileDialog::getSaveFileName(this, 
												tr("保存文件"), 
												QDir::currentPath(), 
			tr("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"));
           

效果图:

Qt 中的对话框
3.3 打开文件夹对话框 -------- 获取文件夹所在绝对路径

函数接口:

[static] QString QFileDialog::getExistingDirectory(QWidget *parent = Q_NULLPTR, 
												const QString &caption = QString(), 
												const QString &dir = QString(), 
												Options options = ShowDirsOnly);
           

参数说明:

@param parent 			: 父窗口
@param caption 			: 弹出的窗口标题
@param dir 				: 默认打开路径
@param options 			: 可选参数,不填即可
           

4. 进度对话框

其实就是一个提示进度的提示框啦,导入头文件

该类有如下定义:

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();
    void onTimeoutFunction();

private:
    Ui::Widget *ui;

    QProgressDialog *pd;
    QTimer *t;
};
           

具体实现:

void Widget::on_pushButton_clicked()
{
    //新建对象,参数含义:对话框正文,取消按钮名称,进度条范围
    pd = new QProgressDialog("正在保存...","取消",0,100,this);
    //模态对话框
    pd->setWindowModality(Qt::WindowModal);
    //如果进度条运行的时间小于5,进度条就不会显示,默认是4S
    pd->setMinimumDuration(5);
    //设置标题
    pd->setWindowTitle("请稍后");
    //显示处理框
    pd->show();
    //处理过程。。。
    t = new QTimer(this);
    connect(t, SIGNAL(timeout()), this, SLOT(onTimeoutFunction()));
    t->start(1000);
}

int steps = 0;

void Widget::onTimeoutFunction()
{
    steps++;
    pd->setValue(steps);
    if(steps > pd->maximum() || pd->wasCanceled())
    {
        t->stop();
        steps = 0;
        delete pd;
    }

}
           

效果图:

Qt 中的对话框

5. 输入对话框

首先导入相应头文件:

然后我们可以获取用户在这个对话框中输入的内容:

[static] QString QInputDialog::getText(QWidget *parent, 
									const QString &title, 
									const QString &label, 
									QLineEdit::EchoMode mode = QLineEdit::Normal, 
									const QString &text = QString(), 
									bool *ok = Q_NULLPTR, 
									Qt::WindowFlags flags = Qt::WindowFlags(),
									Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
           

参数说明

@param parent 			: 父窗口
@param title			: 弹出的窗口标题
@param label			: 提示用户输入信息
@param mode 			: 输入框输入文本模式
@param text 			: 输入框内可替代文本
@param ok 				: 用户在弹出窗口点击了哪个按钮
@param flags 			: 可选参数,不填即可
@param inputMethodHints : 可选参数,不填即可
           

使用实例

QString text = QInputDialog::getText(NULL, "Input Dialog",
                                        "Please input your comment",
                                        QLineEdit::Normal,
                                        "your comment");
    qDebug() << text;
           

效果图

Qt 中的对话框

6. 向导对话框

实际上是我们在安装软件,或者新建项目时看到的对话框。就 Qt 来说我们见得多的就长这样:

Qt 中的对话框

那么这个我们又应该怎么去使用呢?

别急,听我娓娓道来。

先导入头文件:

#include <QwizardPage>
#include <QWizard>
           

接下来就是公式化的流程了,创建对象 — 设置属性 — 添加页面 — 等待执行结果。

QWizard wizard(this);								// 创建向导对象
wizard.setWindowTitle(tr("Login"));					// 设置导向页面的标题
wizard.addPage(createNewPage("First Page"));		// 往这个对象中添加第一个页面
wizard.addPage(createNewPage("Second Page"));		// 往这个对象中添加第二个页面
wizard.addPage(createNewPage("Third Page"));		// 往这个对象中添加第三个页面
wizard.addPage(createNewPage("Fourth Page"));		// 往这个对象中添加第四个页面
wizard.exec();										// 等待程序运行结束
           

这个 createNewPage 函数是我们自定义的,他的函数原型长这样:

它返回一个向导页面,而参数 message 就是页面中的内容了。

实际运行的效果图是这个样子的:

Qt 中的对话框
Qt 中的对话框
Qt 中的对话框
Qt 中的对话框

很明显,向导页面的顺序和我们用代码 add 的顺序一致。

继续阅读