Qt之QFileDialog快速获取用户选择的文件名

1. 详细描述

QFileDialog类提供一个对话框,允许用户选择文件或目录。
QFileDialog类允许用户遍历文件系统,选择一个或许多文件或一个目录

这里写图片描述

2. 创建文件对话框

最简单的方式是使用静态函数

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)

如果想要和对话框交互,并且获取用户选择的文件名或者目录,这种方式最简单并且行之有效。自动弹出,选中之后自动销毁该文件对话框,然后只需要保存函数的返回值即可

3. 关键概念

3.1. 创建对话框

fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));

把该代码放入程序中,当程序运行到此处时,会直接弹出一个对话框,用户勾选了文件之后,对话框会销毁,而fileName会保存勾选文件的名称,就像在调用一个函数一样。

3.1.1. parent

this第一个参数,如果parent不为0,文件对话框会显示在父widget的中间

3.1.2. Window Titile

窗口标题为第二个参数

3.1.3. 工作目录

“/home/jana”对话框开始展示“/home/jana”的内容

3.1.4. 过滤器

tr(“Image Files (.png .jpg *.bmp)”)表示用户可以选择图片,后缀为png,jpg, bmp

3.2. 模式

3.2.1. pattern

过滤器

"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
两个分号隔开

3.2.2. FileMode

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();

3.2.3. 视图模式ViewMode

enum    ViewMode { Detail, List }

3.2.3.1 列表
这里写图片描述

3.2.3.2 详细信息
这里写图片描述

3.2.4. AcceptMode

enum    AcceptMode { AcceptOpen, AcceptSave }

Accept模式用来定义对话框是用来打开文件还是用来保存文件

3.2.3.3 保存
这里写图片描述

3.2.3.4 打开
这里写图片描述

3.2.5. Option

enum    Option { ShowDirsOnly, DontResolveSymlinks, DontConfirmOverwrite, DontUseNativeDialog, ..., DontUseSheet }

该属性影响对话框的界面外观
默认情况下,所有选项都是被禁用
参数应该在显示对话框之前进行设置。当对话框可视的时候设置这些属性不被担保立刻生效。依赖于参数和平台

4. 示例

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变量中,非常方便。

5. 常用模式

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();

6. 引用

https://download.csdn.net/download/lk142500/10596068
http://qt.apidoc.info/4.8.5/qfiledialog.html

猜你喜欢

转载自blog.csdn.net/lk142500/article/details/81566205