Qt系统标准路径类详解——QStandardPaths_qt standardlocation-程序员宅基地

技术标签: Qt  

系统标准路径类QStandardPaths

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

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

  • 这会使得程序工作目录变得复杂,让用户来干预工作目录,这无疑是一件危险的事情,很可能会破坏程序。

  • 有的程序会希望工作目录是只读的,所以禁止其它用户来对其进行修改。

  • 如果某些配置文件是和其它程序是共享的,如若放置这些文件在某个程序的工作目录中,显然是不明智的做法,而最好的做法就是放在这些标准目录中啦。

     

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

  • Windows:C:/Users//Documents

  • MacOs :~/Documents

  • Linux : ~/Documents

  • Android :/Documents,//Documents

  • IOS :/Documents

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

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

常用接口介绍

这些接口均为静态函数

1QString QStandardPaths::displayName(StandardLocation type)

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

代码:

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

输出结果:

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

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

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

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接口返回的路径列表中所匹配的文件。

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

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

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

QStringList QStandardPaths::standardLocations(StandardLocation type)

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

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25800311/article/details/81987749

智能推荐

Shell脚本自动部署(编译)LAMP平台-程序员宅基地

文章浏览阅读194次。Shell脚本自动部署(编译)LAMP平台LAMP是当下非常流行的一套Web架构,我们可以在GNU/Linux下通过其他人打包的程序包来进行安装; 但是在生产环境中,很多时候都需要我们自己定制安装AMP,编译安装LAMP有以下几个优点根据生产环境灵活定制程序优化编译参数,提高性能解决不必要的软件依赖友情提示:对编译安装有疑问的朋友, 查看我以前写的博客:教你使用rpm、yum..._shell脚本编排平台

Centos7.2上安装libreoffice7.1.0.2-程序员宅基地

文章浏览阅读2.9k次。目录文章目录目录1. 环境准备1.1 机器准备1.2 系统环境2. 升级操作系统3. 安装依赖包4. 安装4.1 下载安装包4.2 创建安装目录4.3 把下载的包上传到目录/opt/libreoffice7.1/中4.4 解压安装包4.5 分别进入解压之后的目录中执行安装命令4.6 确认安装是否成功5. 启动服务6. 查看端口或者进程是否启动1. 环境准备1.1 机器准备服务器ip主机名系统版本192.168.2.215myhostCentos7.21.2 系统环境_libreoffice7.1

基于TextRNN实现情感短文本分类任务_基于深度学习技术的文本情感分类-程序员宅基地

文章浏览阅读1k次。文本分类任务中,CNN可以用来提取句子中类似N-Gram的关键信息,适合短句子文本。TextRNN擅长捕获更长的序列信息。具体到文本分类任务中,从某种意义上可以理解为可以捕获变长、单向的N-Gram信息(Bi-LSTM可以是双向)。_基于深度学习技术的文本情感分类

GIS地理空间数据免费获取_diva gis-程序员宅基地

文章浏览阅读1.1w次,点赞20次,收藏183次。GIS地理空间数据免费获取国内:一、测绘地理信息局会提供权威的数据。需要进入全国地理信息资源目录服务系统网站(http://www.webmap.cn/main.do?method=index),该网站提供:30米全球地表覆盖数据,GlobeLand30能够提供包括:地理位置、分布范围和景观格局等直观的陆表地表覆盖的空间分布和信息。1:100万全国基础地理数据库全国1:100万基础地理数..._diva gis

王者竞速游戏服务器维护了,《王者荣耀》不停机更新维护-程序员宅基地

文章浏览阅读170次。今天王者荣耀的服务器似乎出了点小问题,玩家在游戏里出现了许多BUG,所以官方对全服的玩家进行了一次不停机的更新,那么此次更新的内容相信大家都很想知道吧,小编为大家整理了相关的资讯,感兴趣的玩家就跟着小编一起来看看吧,希望能帮到你。王者荣耀7月17日进行了不停机更新维护,下面给大家带来具体的更新内容,一起来看看吧。亲爱的召唤师:我们计划在2019年7月17日 8:30-9:30 对全服进行不停机更新..._为什么王者荣耀今天不停机

将LGBM用作二分类问题之上_matlablgbm模型-程序员宅基地

文章浏览阅读460次,点赞8次,收藏9次。LGBM(Light Gradient Boosting Machine)可以用于解决二分类问题。事实上,LGBM在实际应用中被广泛用于分类问题,包括二分类问题。在使用LGBM进行二分类问题时,你可以指定目标变量的类型和相关参数。对于二分类问题,你可以使用。指定了二分类问题的目标。你可以根据具体问题和数据集的特点调整其他参数,以优化模型性能。表示使用对数损失作为损失函数,是二分类问题的默认设置。被用于创建一个二分类模型,_matlablgbm模型

随便推点

ajax传json后台接收,Ajax传Jsond Mvc后台接收实例-程序员宅基地

文章浏览阅读555次。Ajax传Jsond Mvc后台接收实例复制代码 代码如下://后台[HttpPost]public JsonResult CheckStock(IEnumerable pvIds){}public class pvIdsCount{public int pvId { set; get; }public int count { set; get; }}//前台$(document).ready(f..._c# ajax传json mvc后台接收实例

整数线性规划实现(lingo,python分枝界定法)_lingo整数约束怎么写-程序员宅基地

文章浏览阅读7.1k次,点赞20次,收藏62次。本文章为上篇建模学习打卡第二天的续文章目录一、本次问题二、本题理解三、问题求解1.lingo实现(1)先抛除整数约束条件对问题求解(2)加入整数约束条件求解2.python实现求解(1)先抛除整数约束条件对问题求解(2)加入整数约束条件求解实现 通过 pulp 库求解(3)加入整数约束条件求解实现 分枝界定法求解一、本次问题二、本题理解目标函数:max = 40x1+90x2一级约束条件:9x1+7x2<=56..._lingo整数约束怎么写

Windows 7: Update is not applicable to your computer-程序员宅基地

文章浏览阅读924次。https://www.sevenforums.com/windows-updates-activation/119088-update-not-applicable-your-computer.html Belarc Advisor - Free Personal PC Audit Secunia Personal Security Inspector Download D..._win7the update is not applicable to vour computet

业界资讯 :flash player11 介绍_flash player 11-程序员宅基地

文章浏览阅读1k次。http://www.adobe.com/products/flashplayer.html这里有关于flash player 11 的一些视频介绍。有兴趣的人可以看看。最近flash player 11.2 正式版已经放出来了,支持stage3d 和兼容老显卡。http://get.adobe.com/cn/flashplayer/_flash player 11

基于java的坦克大战游戏的开发设计与实现-(毕业论文+毕业设计源码+答辩PPT).rar_基于java的战地大战游戏设计与实现答辩-程序员宅基地

文章浏览阅读3.4k次。随着计算机的普及以及对电子游戏的认识, 电子游戏已被越来越多的人选作放松、 娱乐的休闲方式; 电子游戏既不需要专门购买游戏器材, 也不需要宽阔的游戏场地, 只需要一台能独立完成任务的计算机即可, 它可以是人们工作、 学习时用的计算机, 并不需要另行配置,这比起传统休闲游戏即省钱又省事。 局域网游戏更是可以将现实空间中零散的计算机,组织起来, 使其在逻辑空间中集中起来, 使游戏的组织、 开展变得轻松。 。关键词: 坦克大战; 游戏; myEclipse目录一、 系统分析 21.1可行性分析 21.1_基于java的战地大战游戏设计与实现答辩

Android 实现QQ第三方登录_安卓代码怎么实现qq登录页面-程序员宅基地

文章浏览阅读1.3k次。Android 实现QQ第三方登录Android 实现QQ第三方登录首先肯定是去下载SDK和DEMOhttp://wiki.open.qq.com/wiki/mobile/SDK下载本文是我自己整合后的简单DEMO。先看下效果图吧原理:我们要使用QQ登录我们的应用,不是不用注册,是我们在后台为用户注册了,但是用户不知道,注_安卓代码怎么实现qq登录页面

推荐文章

热门文章

相关标签