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

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 类的介绍。

更多参考

原文地址:https://www.cnblogs.com/ZY-Dream/p/10632967.html

时间: 2024-10-14 19:58:46

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

[Xcode10 实际操作]七、文件与数据-(1)获取程序沙箱结构中常用的几个目录

本文将演示如何获取程序沙箱结构中,常见的几个目录. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically fro

一点一点学写Makefile(5)-获取文件所在路径

我们在开发一套代码时,应该保证工程放到任何一个目录中均可以编译成功,但是有时候链接库的时候会造成编译错误,本次就会告诉大家如何动态的获得工程所在的绝对路径 代码下载目录 选择Makefile-5 [sql] view plain copy //makefile CROSS = CC = $(CROSS)gcc CXX = $(CROSS)g++ DEBUG = CFLAGS = $(DEBUG) -Wall -c MV = mv -f RM = rm -rf LN = ln -sf TOP_PA

git clone 指定的单个目录或文件夹

git clone 指定的单个目录或文件夹 针对自己的项目 方法一 基于sparse clone变通方法 创建一个空仓库 拉取远程仓库信息 开启 sparse clone 设置过滤 更新仓库 创建空仓库 mkdir devops cd devops git init # 初始化 拉取远程仓库信息 git remote add -f origin http://your/git/repo.git # 拉取远程仓库信息 开启 sparse clone git config core.sparsech

Qt程序关于路径、用户目录路径、临时文件夹位置获取方法

比如我们有一个程序在: C:/Qt/examples/tools/regexp/regexp.exe 1. 程序所在目录 QString QCoreApplication::applicationDirPath() 那么 qApp->applicationDirPath() 的结果是: 输出:C:/Qt/examples/tools/regexp 2. 程序的完整名称.那么可以这么写: qApp->applicationFilePath() 输出:C:/Qt/examples/tools/re

[Windows]_[MacOSX]_[获取程序的执行文件所在路径(目录)]

场景: 1. 有时候有些辅助程序文件需要放在主程序文件同样的位置,便于管理和调用,这时候就需要通过主程序的路径来获取辅助程序所在位置. 2. 或者通过执行文件地址获取程序目录的安装地址. 方案: 1. 这里列出来省的大家去费神去找了. Windows实现: Unicode2Utf8实现搜博客里有- #include <Windows.h> #include <shlwapi.h> std::string GetExeDir() { static wchar_t szbuf[MAX_

C#获取程序所在目录路径

方法1:Directory.GetCurrentDirectory().这个方法只能在.NET的完整版中使用,NETCF中不支持该功能,调用时会引发异常.获取的是当前目录,并不一定是真正的路径,跟OpenFile对话框有关联.  不推荐使用. 方法2: System.Windows.Forms.Application.StartupPath 这个方法只能在.NET的完整版中使用,NETCF中不支持该功能,调用时会引发异常. 获取运行程序的路径. 推荐使用 方法3:System.IO.Path.G

delphi根据进程PID获取程序所在路径的函数(用OpenProcess取得句柄,用GetModuleFileNameEx取得程序名)

uses psapi; {根据进程PID获取程序所在路径的函数}function GetProcessExePath(PID: Cardinal): string;varpHandle: THandle;buf: array[0..MAX_PATH] of Char;begin{获取进程句柄}pHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);{获取进程路径}GetModuleFileN

Environment类,获取程序所在机器信息

一.属性 CommandLine  获取该进程的命令行.CurrentDirectory 获取或设置当前工作目录的完全限定路径.ExitCode 获取或设置进程的退出代码.HasShutdownStarted 获取一个值,该值指示公共语言运行时 (CLR) 是否正在关闭.Is64BitOperatingSystem  确定当前操作系统是否为 64 位操作系统.Is64BitProcess 确定当前进程是否为 64 位进程.MachineName  获取此本地计算机的 NetBIOS 名称.New

C# 获取程序安装目录

在网页启动本地程序需要将命令写入注册表,在网页调用命令即可. 首先将注册信息创建一个注册表文件 .reg 格式,以页面启动 notepad++ 程序为例 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Webshell] [HKEY_CLASSES_ROOT\Webshell\DefaultIcon] [HKEY_CLASSES_ROOT\Webshell\shell] [HKEY_CLASSES_ROOT\Webshell\she