背景
在写客户端的时候经常会遇到打开或保存文件的需求,这时候需要弹出文件对话框让用户进行选择。Qt提供了QFileDialog控件来显示文件对话框,可以使用静态函数或者创建QFileDialog对象来实现该功能,具体使用如下:
保存文件对话框
[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());
getSaveFileName:该函数为一个静态函数,弹出一个模态的文件保存框,如果父窗口为空,则显示在桌面中央,该函数可以很方便的获得用户要保存的完整文件名。
parent :指定对话框的父窗口。
caption :设置文件保存框的标题。
dir :设置文件保存框默认的打开路径,若该路径包含文件名,则默认选中该文件(该文件名显示在保存框的下方)。
filter :设置文件过滤器,设置保存框显示的文件类型,若有多个类型用;;隔开。例如:".png;;.jpg;;*.*"。
selectedFilter :获得保存的文件类型,确认保存selectedFiltr值为文件类型,取消则为空。
options :保存对话框的一些配置。
返回值:保存文件的路径(包含文件名)。
QString filter;
//系统得用户目录
QString fileName = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/123.mp3";
QString saveFile = QFileDialog::getSaveFileName(this, "0.0", fileName,
"*.cpp;;*.png;;*.jpg;;*.*", &filter);
QFileDialog saveDialog;
//设置对话框打开的模式,是打开文件还是保存文件
saveDialog.setAcceptMode(QFileDialog::AcceptSave);
//设置对话框的标题
saveDialog.setWindowTitle("0.0");
//设置对话框的打开路径(只是路径,加上文件名失效)
saveDialog.setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
//设置对话框默认显示文件名
saveDialog.selectFile("123");
//设置文件过滤器
saveDialog.setNameFilter("*.cpp;;*.png;;*.jpg;;*.*");
//设置默认选中文件保存类型
saveDialog.selectNameFilter("*.png");
if (saveDialog.exec() == QFileDialog::AcceptSave) {
//保存文件的路径(包含文件名)
QString saveFile = saveDialog.selectedFiles().first();
//保存文件的路径
QString savePath = saveDialog.directory().path();
//获得文件过滤器类型
QString filter = saveDialog.selectedNameFilter();
}
![](https://i-blog.csdnimg.cn/blog_migrate/4eee2e982ccb3b305b60c4564f7ffcc8.png)
选择文件对话框
[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());
getOpenFileName:该函数为一个静态函数,弹出一个模态的文件选择框,如果父窗口为空,则显示在桌面中央,该可以很方便的获得用户选择的完整文件名,如果取消则返回空。参数意义与getSaveFileName一致。
QString filter;
//应用程序所在目录
QString fileName = QApplication::applicationDirPath() + "/main.obj";
//打开多个文件使用getOpenFileNames
QString openFile = QFileDialog::getOpenFileName(this, "0.0", fileName, "*.*", &filter);
QFileDialog openDialog;
//设置对话框打开的模式
openDialog.setAcceptMode(QFileDialog::AcceptOpen);
//设置对话框的标题
openDialog.setWindowTitle("0.0");
//设置对话框的打开路径(只是路径,加上文件名失效)
openDialog.setDirectory(QApplication::applicationDirPath());
//设置对话框默认选中文件名
openDialog.selectFile("/main.obj");
//设置对话框文件过滤器
openDialog.setNameFilter("*.cpp;;*.png;;*.jpg;;*.*");
//设置文件模式,例如:已存在未存在都可选择,只能选中已存在文件,同时选中多个文件等
openDialog.setFileMode(QFileDialog::ExistingFile);
if (openDialog.exec() == QFileDialog::AcceptSave) {
//打开文件的路径(包含文件名)
QString openFile = openDialog.selectedFiles().first();
//打开文件的路径
QString openPath = openDialog.directory().path();
//获得文件过滤器得类型
QString filter = openDialog.selectedNameFilter();
}
![](https://i-blog.csdnimg.cn/blog_migrate/15a196be4e0a0274a91ffef8d3839b51.png)