如何通过Qt获取当前程序运行路径及特殊路径的方法?

2026-04-01 22:521阅读0评论SEO资讯
  • 内容介绍
  • 相关推荐

本文共计1223个文字,预计阅读时间需要5分钟。

如何通过Qt获取当前程序运行路径及特殊路径的方法?

通常在我们的程序中,需要访问一些特殊的路径,比如程序所在路径、用户目录路径、临时文件路径等。在Qt中实现这些功能的方法相对简单,但具体方法略有不同,例如获取程序所在路径和用户目录路径。

获取程序所在路径可以使用`QCoreApplication::applicationDirPath()`方法,获取用户目录路径可以使用`QDir::homePath()`方法。以下是相关代码示例:

cppQString programPath=QCoreApplication::applicationDirPath();QString userPath=QDir::homePath();

注意,这些方法不需要安装额外的包或库,且代码简洁,易于理解。

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

比如我们有一个程序在

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

1. 程序所在路径

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

//输出C:/Qt/examples/tools/regexp

qDebug() <

2. 程序的完整名称

可以这么写

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

qDebug()

3. 当前工作目录

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

qDebug() <

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

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

4. 用户目录路径

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

博主的用户目录路径为"C:/Users/Administrator"。

5. 桌面路径

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

QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);

Qt 5 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);

QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);

6. 程序数据存放路径

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

如何通过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 帮助文档的解释这个方法可以确保返回的路径非空。所以我认为应该优先选用这个方法。

7. 临时文件路径

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

参考

本文共计1223个文字,预计阅读时间需要5分钟。

如何通过Qt获取当前程序运行路径及特殊路径的方法?

通常在我们的程序中,需要访问一些特殊的路径,比如程序所在路径、用户目录路径、临时文件路径等。在Qt中实现这些功能的方法相对简单,但具体方法略有不同,例如获取程序所在路径和用户目录路径。

获取程序所在路径可以使用`QCoreApplication::applicationDirPath()`方法,获取用户目录路径可以使用`QDir::homePath()`方法。以下是相关代码示例:

cppQString programPath=QCoreApplication::applicationDirPath();QString userPath=QDir::homePath();

注意,这些方法不需要安装额外的包或库,且代码简洁,易于理解。

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

比如我们有一个程序在

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

1. 程序所在路径

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

//输出C:/Qt/examples/tools/regexp

qDebug() <

2. 程序的完整名称

可以这么写

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

qDebug()

3. 当前工作目录

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

qDebug() <

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

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

4. 用户目录路径

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

博主的用户目录路径为"C:/Users/Administrator"。

5. 桌面路径

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

QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);

Qt 5 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);

QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);

6. 程序数据存放路径

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

如何通过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 帮助文档的解释这个方法可以确保返回的路径非空。所以我认为应该优先选用这个方法。

7. 临时文件路径

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

参考