系统标准路径类详解——QStandardPaths

简介: 系统标准路径类详解——QStandardPaths

今天给大家分享一个非常好用的类,系统标准路径类QStandardPaths

所谓系统标准路径指的是本地文件系统中,用户的特定目录或系统的配置目录。比如在Windows系统中的“我的文档”,“视频”,“图片”等目录位置。

对于一个大型项目,系统的标准目录是保存数据,配置信息的一个非常有用的地方。例如,一个应用程序需要将下载好的文档保存在本地文件系统的某个地方,而它不能假设某个定好的路径是存在于磁盘上的。有的人可能会将这个文档保存在应用程序所在的工作目录中,当然这是个好方法,但有时应用程序并不希望将数据放在工作目录中,这是因为:

  • 这会使得程序工作目录变得复杂,让用户来干预工作目录,这无疑是一件危险的事情,很可能会破坏程序。
  • 有的程序会希望工作目录是只读的,所以禁止其它用户来对其进行修改。
  • 如果某些配置文件是和其它程序是共享的,如若放置这些文件在某个程序的工作目录中,显然是不明智的做法,而最好的做法就是放在这些标准目录中啦。

对于系统标准目录,我们可以认定它是必然存在的(即使不存在,也可自动创建),但是不同的操作系统,可能有不一样的系统标准目录。例如“我的文档”目录位置

  • Windows:C:/Users//Documents
  • MacOs :~/Documents
  • Linux : ~/Documents
  • Android :/Documents,//Documents
  • IOS :/Documents

如果想要做跨平台的系统,像这些路径,你都得想办法获取,这只是一个我的文档,如果再加上“下载”,“图片”等标准路径,想想是不是都很麻烦。

然而,Qt却给我们提供了非常方便的类来获取这些标准目录路径,它就是今天要介绍的QStandardPaths类。

常用接口介绍

这些接口均为静态函数

1 QString QStandardPaths::displayName(StandardLocation type)

根据标准目录类型化,返回对应的本地名称,如果找不到,返回空QString。 例如指定type为DesktopLocation,则返回桌面名称;DocumentsLocation,则返回文档目录名称。

代码:

qDebug() << QStandardPaths::displayName(QStandardPaths::DesktopLocation)
   << QStandardPaths::displayName(QStandardPaths::DocumentsLocation);


输出结果:


2 QString QStandardPaths::findExecutable(const QString &executableName, const QStringList &paths = QStringList())

在指定的路径中查找名为executableName的可执行文件,如果paths为空,则在系统路径中查找。 系统路径指PATH环境变量的值。 如果存在,返回可执行文件的绝对文件路径,如果没有找到,则返回空字符串。

QStringList paths;
paths << "D:/notepadd++/soft/Notepad++";
qDebug() << QStandardPaths::findExecutable("notepad++", paths);


3 QString QStandardPaths::locate(StandardLocation type, const QString &fileName, LocateOptions options = LocateFile)

根据标准目录类型,在该目录中查找名为fileName的文件或目录。 返回找到的第一个文件或目录的完整路径(取决于options)。 如果找不到这样的文件或目录,则返回一个空字符串

qDebug() << QStandardPaths::locate(QStandardPaths::DocumentsLocation, "file.txt");



这里大家可能有疑问,这个接口并不会递归查询子目录中的文件,而在同一目录下文件名是不可以重名的,所以也就最多有一个匹配的文件,但它的接口描述是返回第一个。其实,某一种类型的系统标准目录可能会有多个路径,因此,系统会按照顺序查找这些路径中的文件或目录。 例如QStandardPaths::DataLocation,数据文件类型目录就有多个路径与之对应:

qDebug() << QStandardPaths::standardLocations(QStandardPaths::DataLocation);

所以,该函数会依次查询standardLocations接口返回的路径列表中所匹配的文件。

你有没有发现这种查询方式跟编译器查找头文件的方式很像呢,当然,你也可以把这种功能应用在你的程序中,会不会有种高大上的感觉。

4 QStringList QStandardPaths::locateAll(StandardLocation type, const QString &fileName, LocateOptions options = LocateFile)

同locate接口,但这里返回的是所有符合条件的文件或目录。

5 QStringList QStandardPaths::standardLocations(StandardLocation type)

根据标准目录类型,返回该类型的所属的所有目录路径。 如果可以确定的话,目录列表从高优先级到低优先级排序。 如果type没有定义,则此列表为空。


这个类很简单,但知道的人可能并不多,今天分享给大家,希望你有所收获吧。


最后也希望大家多多支持小豆君的创作,关注小豆君的公众号“小豆君Qt分享”,最新文章都会在公众号第一时间发布,或者你有不懂的问题,关注公众号后,可加好友或进Qt群获得答案。

相关文章
|
19天前
|
存储 API
使用Webpack的module.hot API来定义模块的热替换
使用Webpack的`module.hot` API实现模块热替换,简单示例展示如何在`myModule`变化时执行回调。`module.hot.accept`接收模块路径和回调函数,当模块或其依赖变更时触发回调,用于执行更新逻辑。可通过`module.hot.data`保存和恢复状态以实现热替换时保持应用程序的状态。
|
11月前
|
PHP
php开发实战分析(4):php调用封装函数包含文件路径自适应不同目录的解决方案($_SERVER[‘DOCUMENT_ROOT‘]与__DIR__魔术常量)
php开发实战分析(4):php调用封装函数包含文件路径自适应不同目录的解决方案($_SERVER[‘DOCUMENT_ROOT‘]与__DIR__魔术常量)
137 0
|
10月前
WEB 工程路径专题--base 标签的使用和建议示意图
WEB 工程路径专题--base 标签的使用和建议示意图
57 0
WEB 工程路径专题--base 标签的使用和建议示意图
多model项目下,某个项目引用了公共lib下的service, 其他模块想不受影响的启动解决办法
多model项目下,某个项目引用了公共lib下的service, 其他模块想不受影响的启动解决办法
58 0
|
JavaScript Linux vr&ar
通过path模块进行路径拼接|学习笔记
快速学习通过path模块进行路径拼接
253 0
通过path模块进行路径拼接|学习笔记
pathlib一个优雅的路径操作模块,碾压os!
pathlib一个优雅的路径操作模块,碾压os!
FastAPI(4)- 路径参数 Path Parameters (下)
FastAPI(4)- 路径参数 Path Parameters (下)
155 0
FastAPI(4)- 路径参数 Path Parameters (下)
FastAPI(4)- 路径参数 Path Parameters (上)
FastAPI(4)- 路径参数 Path Parameters (上)
176 0
FastAPI(4)- 路径参数 Path Parameters (上)
|
Go
Go基础:路径、文件名和包名的关系
Go基础:路径、文件名和包名的关系
642 0
Go基础:路径、文件名和包名的关系
|
编译器 C语言 计算机视觉
QtCreator里添加外部第三库、头文件路径的方法(.pro文件)
QtCreator里添加外部第三库、头文件路径的方法(.pro文件)
837 0
QtCreator里添加外部第三库、头文件路径的方法(.pro文件)