一、概述
Qt提供了多种自带的标准对话框,常见的对话框包括文件对话框、颜色对话框、字体对话框、输入对话框、消息对话框。
二、文件对话框
文件对话框通过QFileDialog类实现,通过文件对话框可以打开一个文件浏览对话框,可以实现打开文件、文件目录选择、保存文件的功能。
2.1、打开一个文件
打开一个文件调用的函数原型为
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());
该函数使用是主要使用前4个参数,示例程序代码如下:
QString fileName;QString dlgTitle = "打开一个文件";QString filter = "文本文件(*.txt);;图片(*.jpg);;所有文件(*.*)";fileName = QFileDialog::getOpenFileName(this, dlgTitle, "", filter);
程序运行之后将会弹出如下图所示的对话框,选择完一个文件之后,文件名以及其路径将会返回至QString变量fileName。对话框仅用于获取所选文件的路径及名称,具体对文件的读操作则需要通过QFile等函数完成。
对话框标题以及文件过滤器所在的位置已在图中标出。
2.2、打开多个文件
可以在弹出的对话框中选择多个文件,其函数原型为:
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())
示例程序代码如下:
QStringList fileNames;QString dlgTitle = "打开多个文件";QString filter = "文本文件(*.txt);;图片(*.jpg);;所有文件(*.*)";fileNames = QFileDialog::getOpenFileNames(this, dlgTitle, "", filter);
程序运行之后弹出的对话框与打开文件时相似,当选择完多个文件之后,各个文件的文件名以及其路径将会返回至QStringList变量fileNames中。
2.3、保存文件对话框
通过此对话框可以为文件选择保存的路径及文件名,其函数原型为:
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())
示例程序代码如下:
QString fileName;QString dlgTitle = "保存文件";QString filter = "文本文件(*.txt);;图片(*.jpg);;所有文件(*.*)";fileName = QFileDialog::getSaveFileName(this, dlgTitle, "", filter);
程序运行之后将会弹出如下图所示的对话框,可以选择现有的文件也可输入文件名创建新文件,操作完成后,文件名以及其路径将会返回至QString变量fileName。对话框仅用于获取文件保存的路径及名称,具体对文件的写操作则需要通过QFile等函数完成。
三、颜色对话框
颜色对话框通过QColorDialog类实现,通过此对话框可以选择一种需要的颜色,其函数原型为:
QColor QColorDialog::getColor(const QColor &initial = Qt::white, //保存所选颜色的变量QWidget *parent = Q_NULLPTR, const QString &title = QString(), //对话框标题ColorDialogOptions options = ColorDialogOptions())
示例程序代码如下,选择的颜色将会保存在QColor类变量thecolor中,通过Qpalette类可以为指定的对象设置颜色。
QColor theColor;QString dlgTitle = "选择颜色";theColor = QColorDialog::getColor(theColor, this, dlgTitle);QPalette pal;pal.setColor(QPalette::Text, theColor); //为调色板类设置颜色
程序运行之后将会弹出如下图所示的对话框
四、字体对话框
字体对话框通过QFontDialog类实现,通过此对话框可以选择一种需要的字体,其函数原型为:
QFont QFontDialog::getFont(bool *ok, //用于判断选择字体是否成功const QFont &initial, 保存所选字体的变量QWidget *parent = Q_NULLPTR, const QString &title = QString(), //对话框标题FontDialogOptions options = FontDialogOptions())
示例程序代码如下,选择的字体将会保存在QFont类变量thefont中,可以直接用于设置对象的字体。
QFont thefont;QString dlgTitle = "选择字体";bool ok = false;thefont = QFontDialog::getFont(&ok, thefont, this, dlgTitle);if(ok){ui->plainTextEdit->setFont(thefont);}
程序运行之后将会弹出如下图所示的对话框
五、输入对话框
输入对话框通过QInputDialog类实现,根据不同的输入数据类型可以分为输入文本、输入整数、输入浮点数和下拉列表选择输入。
5.1、输入文本对话框
通过此对话框可以输入一个字符串文本,其函数原型为:
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)
示例程序代码如下,通过对话框输入的文本将会保存在inputStr。
QString inputStr;QString dlgTitle = "输入文字对话框";QString textLabel = "请输入文件名";inputStr = QInputDialog::getText(this, dlgTitle, textLabel);
程序运行之后将会弹出如下图所示的对话框
5.2、输入整数对话框
通过此对话框可以输入一个整数,其函数原型为:
int QInputDialog::getInt(QWidget *parent, const QString &title, //对话框标题const QString &label, //输入栏标签int value = 0, //输入栏默认值int min = -2147483647, //最大输入数值int max = 2147483647, //最小输入数值int step = 1, //spinBox步进大小bool *ok = Q_NULLPTR, //输入成功标志Qt::WindowFlags flags = Qt::WindowFlags())
示例程序代码如下,通过对话框输入的整数将会保存在intput中。
int intput;QString dlgTitle = "输入整数对话框";QString label = "请输入字体大小";bool ok = false;QFont font = ui->plainTextEdit->font();int min = 0;int max = 20;int step = 1;intput = QInputDialog::getInt(this, dlgTitle, label, font.pointSize(), min, max, step);font.setPointSize(intput);ui->plainTextEdit->setFont(font);
程序运行之后将会弹出如下图所示的对话框
5.3、输入浮点数对话框
通过此对话框可以输入一个浮点数,其函数原型为:
double QInputDialog::getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, //小数点有效位数bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())
示例程序代码如下,通过对话框输入的浮点数将会保存在intput中。
float input;QString dlgTitle = "输入浮点数对话框";QString label = "请输入浮点数";float defVal = 12.00;float min = 0;float max = 1000;float dec = 2;input = QInputDialog::getDouble(this, dlgTitle, label, defVal, min, max, dec);ui->plainTextEdit->appendPlainText(QString::asprintf("%f", input));
程序运行之后将会弹出如下图所示的对话框
5.4、下拉列表选择输入对话框
通过此对话框可以从下拉列表中选择一个项,其函数原型为:
QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, //对话框中列表的内容int current = 0, bool editable = true, //列表内容是否可编辑bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
示例程序代码如下,在对话框下拉列表中选择的项内容将会保存在getText中。
QString getText;QStringList defItem;QString dlgTitle = "选择项目";QString label = "请选择一个项目";defItem << "北京" << "上海" <<"天津" << "重庆";getText = QInputDialog::getItem(this, dlgTitle, label, defItem);ui->plainTextEdit->appendPlainText(getText);
程序运行之后将会弹出如下图所示的对话框
六、消息对话框
输入对话框通过QMessageBox类实现,根据不同的消息类型可以分为information消息、warning消息、critical消息、about消息、question消息。此处以critical消息、question消息为例进行介绍。
6.1、critical消息
此对话框将会弹出一个critical消息,其函数原型为:
int QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, //消息内容int button0, //对话框上的按键int button1, int button2 = 0)
示例程序代码如下
QString title = "critical消息";QString text = "错误(2704)";QMessageBox::critical(this, title, text, QMessageBox::Ok, //按键1为okQMessageBox::Cancel, //按键2为cancelQMessageBox::NoButton); //没有按键3
程序运行之后将会弹出如下图所示的对话框
6.2、question消息
此对话框将会弹出一个question消息,其函数原型为:
int QMessageBox::question(QWidget *parent, const QString &title, const QString &text, //消息内容int button0, //对话框上的按键int button1, int button2 = 0)
示例程序代码如下
QMessageBox::StandardButton retval; //获取对话框中所按下的按键QString title = "question消息";QString text = "存在问题";retval = QMessageBox::question(this, title, text, QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);ui->plainTextEdit->appendPlainText(QString::asprintf("%d", retval));
程序运行之后将会弹出如下图所示的对话框