Qt基础-标准对话框(QColorDialog、QFileDialog)
Qt提高了一些常用的标准对话框,均继承自QDialog类。
颜色对话框
颜色对话框类QColorDialog可以获取指定的颜色。
头文件
#include <QColorDialog>
使用方法:
QColor clr = QColorDialog::getColor(Qt::black, this, "设置字体颜色");
if (clr.isValid())
{
...
}
函数原型:
[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white,
QWidget *parent = Q_NULLPTR,
const QString &title = QString(),
ColorDialogOptions options = ColorDialogOptions())
弹出一个模态的颜色对话框,初始颜色为initial,父对象为parent,title为对话框的标题。
文件对话框
文件对话框类QFileDialog可以选择文件或文件夹。
- 头文件
#include <QFileDialog>
使用方法1:静态函数法
QString path = QFileDialog::getOpenFileName(this, "选择文件", "./", "项目文件(*.h *.cpp);;所有文件(*,*)");
if (!path.isEmpty())
{
...
}
函数原型:
[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())
弹出一个模态的文件对话框
- parent–父对象
- caption–对话框的标题
- dir–默认打开的路径,如果dir为空,则会打开上一次的位置,如果路径中包含文件名,则该文件默认被选中
- filter–文件类型过滤器,多个过滤器之间以";;"分隔。
上述是打开文件对话框,类似的还有:
getExistingDirectory() //获取已存在的文件夹的路径;
getOpenFileNames() //打开多个文件;
getSaveFileName() //保存文件对话框;
使用方法2:定义变量法
QFileDialog dlg(this);
dlg.setAcceptMode(QFileDialog::AcceptSave); //保存模式
//dlg.setAcceptMode(QFileDialog::AcceptOpen); //打开模式,默认
dlg.setFileMode(QFileDialog::AnyFile); //可以选择任何文件,包括存在/不存在的
//dlg.setFileMode(QFileDialog::ExistingFile); //单个已存在的文件
//dlg.setFileMode(QFileDialog::Directory); //文件夹
//dlg.setFileMode(QFileDialog::ExistingFiles); //0个或多个已存在的文件
dlg.setViewMode(QFileDialog::List); //显示简洁模式,(Qt5.9.0不起作用)
//dlg.setViewMode(QFileDialog::Detail); //显示详细模式,默认
QStringList filter = QStringList() << "All types(*.*)"
<< "Normal text file(*.txt)"
<< "C++ source file(*.h *.hh *.hpp *.hxx *.cpp *.cxx *.cc *.ino)";
dlg.setNameFilters(filter); //过滤器
dlg.setDefaultSuffix("txt"); //默认后缀
dlg.setOption(QFileDialog::HideNameFilterDetails); //过滤器以分号隔开,否则以空格隔开
if (dlg.exec())
{
QStringList fileName = dlg.selectedFiles(); //选择的文件名
QString dirPath = dlg.directory().absolutePath(); //所在文件夹的绝对路径
}
说明
-
注意:返回的路径的分隔符为“/”,如C:/Users/zh/Desktop/1.bmp
-
getOpenFileName()返回的是含有文件名的路径,如果要获取不含文件名的路径,可使用QFileInfo类
QFileInfo fileInfo(path);
QString hPath = fileInfo.path();
另:可以获取本地的路径,如桌面、文档、下载等,参考QStandardPaths类。
字体对话框
字体对话框类QFontDialog可以获取指定的字体。
头文件
#include <QFontDialog>
使用方法:
bool ok;
QFont font = QFontDialog::getFont(&ok, QFont("宋体"), this, "选择字体");
if (ok)
{
...
}
函数原型:
[static] QFont QFontDialog::getFont(bool *ok,
const QFont &initial,
QWidget *parent = Q_NULLPTR,
const QString &title = QString(),
FontDialogOptions options = FontDialogOptions())
弹出一个模态的字体对话框,是否点击“OK”返回到ok中,初始字体为initial,父对象为parent,title为对话框的标题。
输入对话框
输入对话框类QInputDialog可以输入一个数值或字符串。
头文件
#include <QInputDialog>
使用方法:
bool ok;
//输入字符串对话框
QString str = QInputDialog::getText(this, "输入字符串对话框", "输入字符串", QLineEdit::Normal, "字符串", &ok);
//输入整数对话框
int value = QInputDialog::getInt(this, "输入整数对话框", "输入整数", 10, -100, 100, 1, &ok);
//输入浮点数对话框
double dvalue = QInputDialog::getDouble(this, "输入浮点数对话框", "输入浮点数", 10.0, -99.99, 99.99, 2, &ok);
//获取列表项
QStringList items;
items << "项目1" << "项目2";
QString item = QInputDialog::getItem(this, "选择项对话框", "选择项", items, 0, false, &ok);
消息对话框
消息对话框类QMessageBox可以提示消息。
头文件
#include <QMessageBox>
使用方法:
//关于对话框
QMessageBox::about(this, "关于软件", "此软件...");
//关于Qt对话框
QMessageBox::aboutQt(this, "关于Qt");
//问题对话框
int ret1 = QMessageBox::question(this, "问题对话框", "显示问题?");
//提示对话框
int ret2 = QMessageBox::information(this, "提示对话框", "显示提示");
//警告对话框
int ret3 = QMessageBox::warning(this, "警告对话框", "显示警告");
//错误对话框
int ret4 = QMessageBox::critical(this, "错误对话框", "显示错误");
进度对话框
进度对话框类QProgressDialog可以对耗时较长操作的进度提供了反馈。
头文件
#include <QProgressDialog>
使用方法:
QProgressDialog progress("当前进度", "取消", 0, 50000, this);
progress.setWindowTitle("进度对话框");
progress.show();
for (int i = 0; i < 50000;i++)
{
progress.setValue(i);
QCoreApplication::processEvents(); //避免界面卡死
if (progress.wasCanceled())
{
break;
}
}
progress.setValue(50000);
函数原型:
QProgressDialog::QProgressDialog(const QString &labelText,
const QString &cancelButtonText,
int minimum,
int maximum,
QWidget *parent = Q_NULLPTR,
Qt::WindowFlags f = Qt::WindowFlags())
labelText为标签内容,cancelButtonText为取消按钮的文本,minimum为最小值,maximum为最大值。
错误信息对话框
错误信息对话框类QErrorMessage可以显示错误信息。
头文件
#include <QErrorMessage>
使用方法:
定义函数的一个成员变量
QErrorMessage errordlg;
在函数体中实现
errordlg.setWindowTitle("错误信息");
errordlg.showMessage("提示错误信息");