Qt之QFileDialog简单用法

简述

QFileDialog提供了一个对话框用于选择文件或目录。

QFileDialog让用户可以遍历文件系统目录来选择文件或目录。

使用

创建一个QFileDialog最简单的方式是使用静态函数。如下所示:

fileName = QFileDialog::getOpenFileName(this, tr("选择一张图片"), "C:/Users/jiage/Desktop", tr("Image Files (*.png *.jpg *.bmp)"));

在上面的例子中,我们使用QFileDialog的静态函数创建了一个模态对话框。该对话框初始状态会显示"/home"目录中的内容,并且只会展示那些与字符串"Image Files (*.png *.jpg *.bmp)“所确定的模式想匹配的文件。对话框的父亲被设为this,并且窗口标题为"选择一张图片”,如下所示:

也可以不使用静态函数来创建文件QFileDialog,基本用法如下所示

    QFileDialog dialog(this);
    QStringList fileNames;
    if (dialog.exec())
        fileNames = dialog.selectedFiles();

常用接口

常用静态函数

使用QFileDialog最简单且方便的方法是通过它的静态函数,QFileDialog支持的静态函数如下:

函数名称描述
QString getExistingDirectory获取存在的文件夹的路径字符串
QUrl getExistingDirectoryUrl获取存在的文件夹的路径QUrl,与上面的不同之处在于,它可以获取远程文件夹。
QString getOpenFileName获取存在的文件的路径字符串
QStringList getOpenFileNames获取多个存在文件的路径字符串
QUrl getOpenFileUrl与getOpenFileName相似,不同之处在于,它支持远程文件选取。
QList<QUrl> getOpenFileNames与getOpenFileNames相似,不同之处在于,它支持远程文件选取。
QString getSaveFileName用于返回一个文件名,该文件不一定要存在
QUrl getSaveDirectoryUrl用于返回一个文件QUrl,该文件不一定要存在

常用设置

当使用静态函数创建对话框时,不能在该对话框执行过程中删除它的父亲。如果想要在对话框执行过程中删除它的父亲,我们应当使用QFileDialog构造函数来构造一个QFileDialog来使用。下面介绍一些常用设置。

打开模式设置

dialog.setAcceptMode(QFileDialog::AcceptMode mode);

一共有两种模式,如下所示:

常量
QFileDialog::AcceptOpen0
QFileDialog::AcceptSave1

第一种将会以打开文件的形式展示对话框,第二种模式将会以保存文件的形式展示对话框。

设置默认后缀

dialog.setDefaultSuffic("txt");

在很多IDE中,我们保存文件的时候是不需要指定文件后缀的,因为IDE会自动帮我们添加后缀,该函数就是用来实现后缀自动添加功能的。

设置打开目录

dialog.setDirectory(const QString &directory);
dialog.setDirectory(const QDir &directory);
dialog.setDirectoryUrl(const QUrl &directory);

用于设置对话框弹出时,所展示的目录。

设置文件模式

对话框的文件模式用户可以选择的条目类型与数量,可以设置的模式如下:

常量描述
QFileDialog::AnyFile0返回文件名,无论该文件是否存在
QFileDialog::ExistingFile1返回文件名,该文件必须存在
QFileDialog::Directory2返回目录名,文件和目录都会展示出来,但原生Windows文件对话框不会在此模式下展示文件。
QFileDialog::ExistingFiles30或多个存在的文件名

设置方法如下:

dialog.setFileMode(QFileDialog::AnyFile);

设置过滤器

通过设置过滤器,我们可以指定哪些文件应当被显示出来。具体的选项如下所示:

常量描述
QDir::Dirs0x001列出与过滤器相匹配的目录
QDir::AllDirs0x400列出所有目录
QDir::Files0x002列出文件
QDir::Drives0x004列出磁盘驱动器,(在Unix下,该选项被忽略)
QDir::NoSymLinks0x008不列出符号链接(不支持符号链接的系统忽略此项)
QDir::NoDotAndDotDotNoDot | NoDotDot不列出特殊条目:".“和”…"
QDir::NoDot0x2000不列出特殊条目:"."
QDir::NoDotDot0x4000不列出特殊条目:"…"
QDir::AllEntriesDirs | Files | Drives列出目录,文件,磁盘,符号链接
QDir::Readable0x010列出当前应用程序可读的文件
QDir::Writable0x020列出当前应用程序可写的文件
QDir::Executable0x040列出当前应用程序可以执行的文件
QDir::Modified0x080只列出被修改过的文件
QDir::Hidden0x100列出隐藏文件
QDir::System0x200列出系统文件
QDir::CaseSensitive0x800过滤器对大小写敏感

使用方法如下:

setFileter(QDir::Files);

设置过滤器匹配模式

dialog.setNameFilter("All C++ files (*.cpp *.cc *.C *.cxx *.c++)");
dialog.setNameFilter("*.cpp *.cc *.C *.cxx *.c++");

如果filter字符串包含一对括号,其中包含一个或多个文件名通配符模式,并用空格隔开,则仅将括号中包含的文本用作过滤器。所以,上面两种写法是等效的。

我们还可以同时设置多个过滤器,如下所示:

QStringList filters;
filters << "Image files (*.png *.xpm *.jpg)"
        << "Text files (*.txt)"
        << "Any files (*)";

QFileDialog dialog(this);
dialog.setNameFilters(filters);

设置浏览历史记录

在许多IDE中,当我们打开或者新建文件的时候,该IDE会默认打开我们上次打开过的目录,这就是历史记录所要实现的功能。使用方法如下:

QStringList historyList;
dialog.setHistory(historyList);

为文件对话框设置一个字符串列表用来存储浏览历史。

设置选项

setOption(QFileDialog::Option);
setOptions(QFileDialog::Options);

常用选项如下:

常量描述
QFileDialog::ShowDirsOnly0x00000001只展示文件夹
QFileDialog::DontResolveSymlinks0x00000002不解析符号链接
QFileDialog::DontConfirmOverwrite0x00000004不要询问是否覆盖已经存在的文件,默认是询问的
QFileDialog::DontUseNativeDialog0x00000010不要使用系统原生文件对话框。

引用

[1] Qt助手

  • 11
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值