文章目录
-
-
- 1. 颜色对话框
- 2. 字体对话框
- 3. 文件对话框
-
-
- 3.1 打开文件对话框 -------- 获取文件所在绝对路径
- 3.2 保存文件对话框 -------- 获取文件所在绝对路径
- 3.3 打开文件夹对话框 -------- 获取文件夹所在绝对路径
-
- 4. 进度对话框
- 5. 输入对话框
- 6. 向导对话框
-
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)"));
效果图:
当然了,若是过滤条件有多个,则在字符串中以 ;; 隔开,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)"));
效果图:
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;
}
}
效果图:
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;
效果图
6. 向导对话框
实际上是我们在安装软件,或者新建项目时看到的对话框。就 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 就是页面中的内容了。
实际运行的效果图是这个样子的:
很明显,向导页面的顺序和我们用代码 add 的顺序一致。