【Qt编程之Widgets模块】-007:QStandardPaths类使用方法

1 头文件:

#include <QStandardPaths>

2 详细说明

  • QStandardPaths类提供用于访问标准路径的方法,该类包含用于查询本地文件系统上的标准位置的函数,用于常见任务,如特定于用户的目录或系统范围的配置目录。

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

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

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

Qt却给我们提供了非常方便的类来获取这些标准目录路径,它就是今天要介绍的QStandardPaths类。
这些接口均为静态函数

3 成员类型

3.1 LocateOption&&LocateOptions

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

说明
QStandardPaths::LocateFile0x0 只返回文件
QStandardPaths::LocateDirectory0x1 只返回目录
LocateOptions类型是QFlags 的typedef 。它存储LocateOption值的OR组合。

3.2 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上,如果卸载了外部存储,则在外部存储(位置)上具有打开文件的应用程序将被杀死。

  • 注意:在Android 6.0(API 23)或更高版本上,使用QStandardPaths :: writableLocation或QStandardPaths :: 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()。

4 示例代码

void CHardwareLogWidget::onExport()
{
   // QSettings https://doc.qt.io/qt-5/qsettings.html#QSettings
   QSettings settings("Gennius Pro", "geniusclient");
   QString strPreFilePath = settings.value("HardWare Log Export Route").toString();
   // 初次是空的,默认打开路径为桌面 获取默认的文档路径
   if (strPreFilePath.isEmpty())
   {
       strPreFilePath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
   }

  QString filePath = QFileDialog::getExistingDirectory(this, tr("Please select file path..."), strPreFilePath, QFileDialog::ReadOnly);
  if (!filePath.isEmpty())
  {
      settings.setValue("HardWare Log Export Route", filePath);
      std::vector<HardWareOperateLogStr> vector = this->getFilterLog();
      CLogExportTask* pTask = new(std::nothrow) CLogExportTask(filePath, vector);
      if (nullptr != pTask)
      {
          pTask->setHeader(QString("%1,%2,%3,%4").arg(tr("Operate Time")).arg(tr("User name")).arg(tr("Operate Type")).arg(tr("Operate Detail")));
          base::CNormalMessageLoop::instance()->postTask(pTask);
      }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值