Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径、用户目录路径、临时文件夹等。在 Qt 中实现这几个功能所用的方法虽然都不难,但是各不相同,每次用到时还要现去查,很不方便。因此就写了这篇博客,把这几种需求的实现方式总结了一下。算是个备忘录吧。

程序所在路径

获取程序所在路径,QCoreApplication 类里就实现了相关的功能:

QString QCoreApplication::applicationDirPath()

比如我们有一个程序在:

C:/Qt/examples/tools/regexp/regexp.exe

那么 qApp->applicationDirPath() 的结果是:

C:/Qt/examples/tools/regexp

如果除了程序所在路径,我们还想要程序的完整名称。那么可以这么写:

qApp->applicationFilePath()

还是上面的例子,结果是:

C:/Qt/examples/tools/regexp/regexp.exe

当前工作目录

QDir 提供了一个静态函数 currentPath() 可以获取当前工作目录,函数原型如下:

QString QDir::currentPath()

如果我们是双击一个程序运行的,那么程序的工作目录就是程序所在目录。

如果是在命令行下运行一个程序,那么运行程序时在命令行的哪个目录,那个目录就是当前目录。

用户目录路径

Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

QDesktopServices::storageLocation(QDesktopServices::HomeLocation);

Qt 5 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::HomeLocation);

或者

QStandardPaths::standardLocations(QStandardPaths::HomeLocation);

这两个方法的区别是 standardLocations() 返回值是 QStringList。当然对于 HomeLocation 来说这个 QStringList 中只有一个 QString。

还有另外一种方法,利用 QDir 类的一个静态函数:

QDir::homePath();

我的文档路径

Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);

Qt 5 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);

桌面路径

Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);

Qt 5 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);

程序数据存放路径

通常我们会将程序所需的一些数据存入注册表。但是有时需要存储的数据太多,放在注册表中就不适合了。这时我们就要找个专门的地方来放数据。以前我喜欢将数据直接放到程序所在目录,但是后来发现我的程序运行时经常没有权限对这个目录下的文件进行写操作。后来发现其实 Qt 早就替我们考虑过这些问题了。

Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

QDesktopServices::storageLocation(QDesktopServices::DataLocation);

Qt 5 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);

Qt 5.5 中引入了另一种方法:

QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
QStandardPaths::standardLocations(QStandardPaths::AppConfigLocation);

这个方法一般来说和上面的方法得到的结果是相同的。按照 Qt 帮助文档的解释,这个方法可以确保返回的路径非空。所以我认为应该优先选用这个方法。

临时文件路径

Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

QDesktopServices::storageLocation(QDesktopServices::TempLocation);

Qt 5 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::TempLocation);
QStandardPaths::standardLocations(QStandardPaths::TempLocation);

更传统的方法是利用 QDir 的一个静态函数 tempPath()。

QDir::tempPath();

在这个目录下生成临时文件和临时目录需要用到另外两个类: QTemporaryFile 和 QTemporaryDir。就不展开介绍了,大家可以参考 qt 的帮助文档。

至此,常用的各种特殊路径就介绍的差不多了。剩下还有些不常用的,可以参考 QStandardPaths 类的介绍。

Qt 程序获取各种文件路径方法相关推荐

  1. python获取某文件路径_Python获取当前文件路径

    一. Python 获取当前文件路径方法 2. sys.path[0] 获取文件当前工作目录路径(绝对路径) sys.argv[0]|获得模块所在的路径(由系统决定是否是全名) 若显示调用python ...

  2. python 当前文件路径获取方式_Python获取当前文件路径

    一. Python 获取当前文件路径方法 2. sys.path[0] 获取文件当前工作目录路径(绝对路径) sys.argv[0]|获得模块所在的路径(由系统决定是否是全名) 若显示调用python ...

  3. Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

    Qt 程序获取程序所在路径.用户目录路径.临时文件夹等特殊路径的方法 经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径.用户目录路径.临时文件夹等.在 Qt 中实现这几个功能所用的方法虽然都 ...

  4. 批处理查找html,批处理(bat)实现全盘搜索指定文件获取其完整路径方法大全,bat大全分享...

    废话不多说,直接上代码,额,想用的话,自己保存成 [方案一]for /f + dir % [方案二]for /r(比 for /f + dir 效率高,但不会遍历隐藏文件) @echo off rem ...

  5. java 获取包路径_java获取java文件路径的四种方法

    java获取java文件路径的四种方法 发布时间:2020-04-17 11:03:45 来源:亿速云 阅读:750 作者:小新 今天小编给大家分享的是java获取java文件路径的四种方法,很多人都 ...

  6. MFC从字体名获取字库文件路径(从宋体获取到simsun.ttc)

    上一篇有讲到在QT中从字体名获取文字的路径,这个是MFC版本的: #QT从字体名获取字库文件路径#include <string> using namespace std;void wch ...

  7. 获取进程全路径方法(支持xp、win7、win10系统)

    获取进程全路径方法(支持xp.win7.win10系统) 获取进程的全路径的函数包括GetModuleFileNameEx.GetProcessImageFileName.QueryFullProce ...

  8. html5加js实现本地文件读取和写入并获取本地文件路径

    HTML5提供了一台API可以实现文件的读写,文件读取利用API是FileReader 代码如下: 读取本地文件 <!doctype html> <html lang="e ...

  9. ubuntu18.04.4 获取当前文件路径

    ubuntu18.04.4 获取当前文件路径 打开文件夹 右键–>在终端打开 pwd 复制上面地址

最新文章

  1. php bc 取字符串长度,PHP bcsqrt()用法及代码示例
  2. xampps开启mysql_xampps mysql无法启动
  3. Next.js踩坑入门系列(七) —— 其他相关知识
  4. Linux 网络层收发包流程及 Netfilter 框架浅析
  5. 【Tensorflow】 Object_detection之训练PASCAL VOC数据集
  6. RabbitMQ工作笔记-新建用户及创建虚拟主机
  7. 关于含光 800,这里有你想要的一切答案!
  8. 一个简单的json解析器
  9. MySQL-ProxySQL中间件Admin Schemas介绍
  10. 14.各种所需内存计算
  11. 易语言 精易模块 网页_访问 获取显示验证码图片
  12. idea 2018 3.3版本破解
  13. Android源码目录结构
  14. unity 打包一直停留在 detecting current sdk tools version
  15. synctoy 自动运行_安排SyncToy在Windows 7中使用Task Scheduler自动运行
  16. error launching idea
  17. [知识普及]世界知名洋酒
  18. 计算机专业需要盲打,计算机盲打的技巧与方法【听看打练习】
  19. 用JavaScript写的一个摇号程序(随机数)
  20. Android如何在账户设置中添加App的账户

热门文章

  1. 等差数列划分Python解法
  2. sql 2008日志增长过快_SQL语句引起的空间暴增分析
  3. 解决由于操作顺序问题导致 hbase 一直处于启动无法关闭的问题
  4. 计算文本相似度_Python文本相似性计算
  5. android 蓝牙不停扫描,android – BluetoothAdapter不会停止扫描BLE设备
  6. python聚类的结果显示_使用Python进行聚类
  7. 计算机一级应用基础选择题,计算机应用选择题基础复习题 一级计算机考试必备...
  8. 基于FPGA的LED 16×16点阵汉字显示设计
  9. 基于Nexys4DDR的数字时钟设计
  10. redis强一致性_分布式架构一定要有Redis吗?Redis的常见问题我都帮你解答了