Qt:QStandardPaths类

1059 篇文章 280 订阅

头文件:

#include <QStandardPaths>

cmake:

find_package(Qt6 COMPONENTS Core REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Core)

qmake:

QT += core

自从:

Qt 5.0

详细说明

QStandardPaths类提供用于访问标准路径的方法

该类包含用于查询本地文件系统上的标准位置的函数,用于常见任务,如特定于用户的目录或系统范围的配置目录。

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

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

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

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

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

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

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

这些接口均为静态函数

成员类型

LocateOption&&LocateOptions

该枚举描述了可用于控制QStandardPaths::locate和QStandardPaths::locateAll的行为的不同标志。

说明
QStandardPaths::LocateFile0x0只返回文件
QStandardPaths::LocateDirectory0x1只返回目录

LocateOptions类型是QFlags <LocateOption>的typedef 。它存储LocateOption值的OR组合。

QStandardPaths :: StandardLocation

该枚举描述了可以使用诸如QStandardPaths::writableLocation, QStandardPaths::standardLocations, QStandardPaths::displayName.之类的方法查询的不同位置。

该枚举中的某些值表示用户配置。这样的枚举值将在不同的应用程序中返回相同的路径,因此它们可用于与其他应用程序共享数据。其他值特定于此应用程序。下表中的每个枚举值都描述了它是特定于应用程序的还是通用的。

特定于应用程序的目录应假定为其他应用程序无法访问。因此,即使由同一用户运行,放置在此处的文件也可能无法被其他应用程序读取。另一方面,应假定通用目录可由该用户运行的所有应用程序访问,但仍应假定其他用户的应用程序无法访问通用目录。

与其他用户的数据交换不在QStandardPaths的范围内。

说明
QStandardPaths::DesktopLocation0返回用户的桌面目录。这是一个通用值。在没有桌面概念的系统上,这与QStandardPaths :: HomeLocation相同。
QStandardPaths::DocumentsLocation1返回包含用户文档文件的目录。这是一个通用值。返回的路径永远不会为空。
QStandardPaths::AppDataLocation17返回可以存储持久性应用程序数据的目录位置。这是一个特定于应用程序的目录。要获取存储要与其他应用程序共享的数据的路径,请使用QStandardPaths :: GenericDataLocation。返回的路径永远不会为空。在Windows操作系统上,这将返回漫游路径。这个枚举值是在Qt 5.4中添加的。
QStandardPaths::AppConfigLocation18返回应在其中写入用户特定配置文件的目录位置。这是一个特定于应用程序的目录,并且返回的路径永远不会为空。这个枚举值是在Qt 5.5中添加的。

下表提供了不同操作系统上路径的示例。第一条路径是可写路径(除非另有说明)。其他其他路径(如果有)表示不可写的位置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在上面的表中,<APPNAME>通常是组织名称、应用程序名称,或者是打包时生成的唯一名称。类似地,<APPROOT>是这个应用程序安装的位置(通常是一个沙箱)。<APPROOT>是包含应用程序可执行文件的目录。

上面的路径不应该被依赖,因为它们可能会根据OS配置、语言环境或将来的Qt版本而改变。

注意:在Android上,如果卸载了外部存储,则在外部存储(<USER>位置)上具有打开文件的应用程序将被杀死。

注意:在Android 6.0(API 23)或更高版本上,使用QStandardPaths :: writableLocationQStandardPaths :: standardLocations时,必须在运行时请求“ WRITE_EXTERNAL_STORAGE”权限。

注意:在Android上,对GenericDataLocation进行读/写操作需要授予READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE权限。

注意:在iOS上,如果确实将QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last()参数作为参数传递给QFileDialog :: setDirectory(),则将使用本机图像选择器对话框来访问用户的相册。可以使用QFile和相关API加载返回的文件名。此功能已在Qt 5.5中添加。

另请参见writableLocation(),standardLocations(),displayName(),locate()locateAll()

成员函数

locate

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

在类型的标准位置查找名为fileName的文件或目录。

options标志允许您指定是查找文件还是目录。默认情况下,这个标志被设置为LocateFile。

返回找到的第一个文件或目录的绝对路径,否则返回空字符串。

 qWarning() <<   QStandardPaths::locate(QStandardPaths::HomeLocation, QString(),
                                           QStandardPaths::LocateDirectory);

在这里插入图片描述

writableLocation

[static]QString QStandardPaths::writableLocation(QStandardPaths::StandardLocation type)

返回类型文件应写入的目录,如果无法确定位置,则返回空字符串。

注意:返回的存储位置可能不存在;也就是说,它可能需要由系统或用户创建。

例子:

    const QString baseNonPortable = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);;
    qInfo() << baseNonPortable;

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值