热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Qt之QFileDialog简单用法

简述QFileDialog提供了一个对话框用于选择文件或目录。QFileDialog让用户可以遍历文件系统目录来选择文件或目录。使用创建一个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 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中&#xff0c;当我们打开或者新建文件的时候&#xff0c;该IDE会默认打开我们上次打开过的目录&#xff0c;这就是历史记录所要实现的功能。使用方法如下&#xff1a;

QStringList historyList;
dialog.setHistory(historyList);

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

设置选项

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

常用选项如下&#xff1a;

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

引用

[1] Qt助手


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
author-avatar
愁撒_651
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有