QFileDialog类提供一个对话框,允许用户选择文件或目录。
QFileDialog类允许用户遍历文件系统,选择一个或许多文件或一个目录
最简单的方式是使用静态函数
QString getExistingDirectory(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly)
QString getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QStringList getOpenFileNames(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
QString getSaveFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
如果想要和对话框交互,并且获取用户选择的文件名或者目录,这种方式最简单并且行之有效。自动弹出,选中之后自动销毁该文件对话框,然后只需要保存函数的返回值即可
fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));
把该代码放入程序中,当程序运行到此处时,会直接弹出一个对话框,用户勾选了文件之后,对话框会销毁,而fileName会保存勾选文件的名称,就像在调用一个函数一样。
this第一个参数,如果parent不为0,文件对话框会显示在父widget的中间
窗口标题为第二个参数
“/home/jana”对话框开始展示“/home/jana”的内容
tr(“Image Files (.png .jpg *.bmp)”)表示用户可以选择图片,后缀为png,jpg, bmp
过滤器
"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
显示文件的后缀匹配过滤器的文件
可以同时指定多个后缀模式,可以通过XMind右侧的下三角选择
指定多个后缀模式
"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
Separate each one with two semicolons
两个分号隔开
Constant Value Description
QFileDialog::AnyFile 0 文件名,无论文件存在与否.
QFileDialog::ExistingFile 1 已经存在的文件名.
QFileDialog::Directory 2 目录的名称,文件和目录都被显示.
QFileDialog::ExistingFiles 3 个或多个存在的文件的名称.
FileMode指示在对话框中,用户可以选择什么
如果仅仅允许用户选择某个已经存在的文件,则可以使用ExistingFile
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile)
QStringList fileNames;
if (dialog.exec())
fileNames = dialog.selectedFiles();
enum ViewMode { Detail, List }
enum AcceptMode { AcceptOpen, AcceptSave }
Accept模式用来定义对话框是用来打开文件还是用来保存文件
enum Option { ShowDirsOnly, DontResolveSymlinks, DontConfirmOverwrite, DontUseNativeDialog, ..., DontUseSheet }
该属性影响对话框的界面外观
默认情况下,所有选项都是被禁用
参数应该在显示对话框之前进行设置。当对话框可视的时候设置这些属性不被担保立刻生效。依赖于参数和平台
QString QFileDialog::getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0) [static]
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"/home",
tr("Images (*.png *.xpm *.jpg)"));
该函数使用给定的parent窗体widget创建了一个模态的文件对话框
如果parent不为0,文件对话框会显示在父widget的中间
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), "/home/jana/untitled.png",tr("Images (*.png *.xpm *.jpg)"));
项目工作过程中,在程序执行时,仅仅需要弹出一个对话框,然后获取用户选择的文件,得到文件的路径即可,因此使用了该函数。当用户选中了文件,点击OK之后,对话框销毁,选择的文件路径名会保存在fileName变量中,非常方便。
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)"));
dialog.setViewMode(QFileDialog::Detail);
QStringList fileNames;
if (dialog.exec())
fileNames = dialog.selectedFiles();
下面第一个引用是自己为QFileDialog类用XMind总结的文档,较为清晰一些,如果习惯使用XMind,可以下载看一下
https://download.csdn.net/download/lk142500/10596068
http://qt.apidoc.info/4.8.5/qfiledialog.html