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

news2024/11/17 19:33:11

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);
      }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[pgrx开发postgresql数据库扩展]6.返回序列的函数编写(1)单值序列

上篇文章是中规中矩的标准计算函数&#xff0c;就算不用pgrx&#xff0c;也是可以正常理解的&#xff0c;所以基本上没有什么对于pgrx框架有关系的东西&#xff08;唯一有关系的东西&#xff0c;应该就是Rust的时间类型与pgrx的时间类型的计算了&#xff09;。 这篇文章会讲一…

Java面试(1)Java概述

文章目录 Java 概述1.什么是Java2. JDK1.5 之后的三大版本3. Jdk和Jre和JVM的区别4. 什么是跨平台性&#xff1f;原理是什么5. Java 语言有哪些特点?6. 什么是字节码&#xff1f;采用字节码的最大好处是什么7. 为什么不全部使用 AOT&#xff08;since JDK9&#xff09; 呢&…

马赛克处理

去取马赛克的网址&#xff1a; Redact • Photo - Free And Private Image Redaction In The Browser https://redact.photo/ REDACT.PHOTO &#xff08;照片马赛克处理在线工具&#xff09;简介 REDACT.PHOTO是一个照片马赛克处理在线工具&#xff0c;能够帮助我们非常方便…

2023自动化测试的10个最佳实践(建议收藏)

虽然大家都知道坚果是非常健康和有营养的&#xff0c;但是&#xff0c;当你尝试吃它的时候&#xff0c;我猜测过程都不会很顺利。现实就是那么相似&#xff0c;我们都知道测试自动化对软件开发有好处&#xff08;就像坚果对我们的身体一样&#xff01;&#xff09;&#xff0c;…

arcgis插件-带属性TXT转SHP数据(支持独立图层、追加到图层)

20230512记录更新 arcgis插件-带属性TXT转SHP数据&#xff08;支持独立图层、追加到图层&#xff09; 这个版本省略掉新建面图层&#xff0c;再在界面进行选择图层的操作。 界面简化到只需要一步操作&#xff0c;选择&#xff08;或者复制&#xff09;TXT文件所在路径&#x…

机器学习(二)决策树原理剖析及python实现

本篇介绍第二个机器学习算法&#xff1a;决策树算法&#xff0c;我们经常使用决策树处理分类问题&#xff0c;近来的调查表明决策树也是最经常使用的数据挖掘算法。 图1所示的流程图就是一个决策树&#xff0c;长方形代表判断模块&#xff08;decision block&#xff09;&…

[Android]AsyncChannel介绍

背景 在WifiManager.java中&#xff0c;随处可见这样的方法调用实现&#xff1a; 代码路径&#xff1a;frameworks/base/wifi/java/android/net/wifi/WifiManager.java public void connect(int networkId, ActionListener listener) {...getChannel().sendMessage(CONNECT_NE…

你真的会跟 ChatGPT 聊天吗?(下)

接《你真的会跟 ChatGPT 聊天吗&#xff1f;&#xff08;上&#xff09;》&#xff0c;本文下半部分没有无毛猫那么搞笑的内容啦&#xff01;即使如此&#xff0c;哪怕你对文中提及的技术不大了解&#xff0c;也可以毫无压力地看完这篇&#xff0c;描述如何更好地获得 ChatGPT …

视频怎么压缩到20M以内

视频怎么压缩到20M以内&#xff1f;我们知道在很多聊天软件中是限制传输的内容大小的&#xff0c;比如说视频大小会限制20M以内。还有就是我们在发一些邮件时&#xff0c;我们在上传附件的时候也是限制视频大小在20M以内。所以说我们有需要把视频压缩到20M以内的情况。那么针对…

记录一次Windows7操作系统渗透测试

#本文档仅用于实验&#xff0c;请勿用来使用恶意攻击&#xff01; 《中华人民共和国网络安全法》中&#xff0c;恶意破坏计算机信息系统罪在第二十七条被明确规定&#xff0c;规定内容为&#xff1a; 第二十七条 任何单位和个人不得为达到破坏计算机信息系统安全的目的&#x…

Linux发行版新秀:基于Ubuntu、系统核心 “不可变”

Vanilla OS 是近期才公开发布的 Linux 发行版&#xff0c;基于 Ubuntu 构建&#xff0c;免费且开源&#xff0c;默认桌面环境是 GNOME。虽然 Vanilla OS 的底层是 Ubuntu&#xff0c;但它并不是简单地基于 Ubuntu 进行 "remix"&#xff0c;而且外观看起来也不像 Ubun…

FreeRTOS:列表和列表项

要想看懂 FreeRTOS 源码并学习其原理&#xff0c;有一个东西绝对跑不了&#xff0c;那就是 FreeRTOS 的列表和列表项。列表和列表项是FreeRTOS的一个数据结构&#xff0c; FreeRTOS 大量使用到了列表和列表项&#xff0c;它是 FreeRTOS 的基石。要想深入学习并理解 FreeRTOS&am…

【LeetCode】环形链表II+结论证明

题目链接&#xff1a;环形链表II 题目&#xff1a;给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表…

Grafana系列-统一展示-7-ElasticSearch数据源

系列文章 Grafana 系列文章 ElasticSearch 数据源 Grafana内置了对Elasticsearch的支持。你可以进行多种类型的查询&#xff0c;以可视化存储在Elasticsearch中的日志或指标&#xff0c;并使用存储在Elasticsearch中的日志事件对图表进行注释。 配置 ES 数据源 关键的几项…

在两道多线程基础题“顺序打印”中对比一下Java中的wait()和join()

目录 一、基础 二、进阶 一、基础 有三个线程&#xff0c;线程名称分别为&#xff1a;a&#xff0c;b&#xff0c;c&#xff0c;每个线程打印自己的名称。 需要让他们同时启动&#xff0c;并按 c&#xff0c;b&#xff0c;a的顺序打印。 这道题要求打印 cba&#xff0c;且只打…

开发中proc文件系统的简单使用

使用proc文件系统 文章目录 使用proc文件系统1.meminfo文件2. free命令3、创建 /proc 节点4、使用 file_operations 实现 proc 文件读写 导向内核信息5、使用 seq_file 实现 proc 文件的读取 在Linux系统中&#xff0c; “/proc”文件系统十分有用&#xff0c; 它被内核用于向用…

可视化图表API格式要求有哪些?Sugar BI详细代码示例(4)

Sugar BI中的每个图表可以对应一个数据 API&#xff0c;用户浏览报表时&#xff0c;选定一定的过滤条件&#xff0c;点击「查询」按钮将会通过 API 拉取相应的数据&#xff1b;前面说过&#xff0c;为了确保用户数据的安全性&#xff0c;Sugar BI上的所有数据请求都在Sugar BI的…

进击数据基础设施新蓝海,厂商如何“择木而栖”?

文 | 螳螂观察 作者 | 李永华 多样的应用需求&#xff0c;倒逼底层存储能力不断升级&#xff1b; 复杂的数据状况&#xff0c;要求存储能够“兼容并蓄”&#xff1b; 客户企业在数字化方面的战略转型升级&#xff0c;总是触及到存储…… 当数据基础设施成为新的蓝海&#…

大学计算机基础-题库刷题-精选

题库刷题&#xff1a; 写在前面&#xff1a; 这个是我准备应对学校转专业考试而刷的题库&#xff0c; 也是大学计算机的题库&#xff0c;同样适用于大学计算机这门课的期末考试。 精选了一些重要的题目。 目录 题库刷题&#xff1a; 写在前面&#xff1a; 题目1&#x…

内卷时代,大厂产品经理仅用3步破局

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;申悦|慕课网讲师 在当下互联网环境下&#xff0c;产品经理究竟要如何破局&#xff1f; 我认为&#xff0c;既然要破局…