Qt中获取系统目录的方法 (***)

本文介绍了在Qt中获取系统目录的各种方法,如Temp目录、AppData目录、桌面目录等,主要涉及QStandardPaths和QDir类的使用,包括writableLocation和standardLocations等函数,以及Qt4和Qt5的不同之处。
摘要由CSDN通过智能技术生成

目录

Qt中获取系统目录的方法

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

---------------------------------------------------

桌面路径: Qt 5 中引入的方法。

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

参考:官方手册

writableLocation:

[static] QString QStandardPaths::writableLocation(QStandardPaths::StandardLocation type)

Returns the directory where files of type should be written to, or an empty string if the location cannot be determined.

Note: The storage location returned may not exist; that is, it may need to be created by the system or the user.

standardLocations:

[static] QStringList QStandardPaths::standardLocations(QStandardPaths::StandardLocation type)
Returns all the directories where files of type belong.
The list of directories is sorted from high to low priority, starting with writableLocation() if it can be determined. This list is empty if no locations for type are defined.
See also writableLocation().

打开/home目录,按Ctrl+H,就可以看到.config文件夹了。 //隐藏开关

=============================

Qt中获取系统目录的方法

LieCat

2016.06.15 14:10:14字数 51阅读 3,554

1. 获取Temp目录:

QString strDir= QDir::tempPath();

2. 获取AppData目录:

QDir dir = QDir::temp();

dir.cdUp();

QString strDir = dir.absolutePath();

3. 获取桌面目录:

QString strDir = QDir::homePath() + "/Desktop";

==========================

Qt 获取系统路径实例

QStandardPaths::writableLocation(QStandardPaths::???)

DesktopLocation            "C:/Users/Administrator/Desktop"

DocumentsLocation          "C:/Users/Administrator/Documents"
FontsLocation              "C:/WINDOWS/Fonts"
ApplicationsLocation       "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs"

MusicLocation              "C:/Users/Administrator/Music"
MoviesLocation             "C:/Users/Administrator/Videos"
PicturesLocation           "C:/Users/Administrator/Pictures"

RuntimeLocation            "C:/Users/Administrator"

DownloadLocation           "C:/Users/Administrator/Downloads"

GenericCacheLocation       "C:/Users/Administrator/AppData/Local/cache"
GenericConfigLocation      "C:/Users/Administrator/AppData/Local"
CacheLocation              "C:/Users/Administrator/AppData/Local/TestApp/cache"
GenericDataLocation        "C:/Users/Administrator/AppData/Local"

TempLocation               "C:/Users/Administrator/AppData/Local/Temp"
HomeLocation               "C:/Users/Administrator"
DataLocation               "C:/Users/Administrator/AppData/Local/TestApp"
ConfigLocation             "C:/Users/Administrator/AppData/Local/TestApp"
//
AppDataLocation            "C:/Users/Administrator/AppData/Roaming/TestApp"
AppConfigLocation          "C:/Users/Administrator/AppData/Local/TestApp"
AppLocalDataLocation       "C:/Users/Administrator/AppData/Local/TestApp"


作者:爱写诗的程序员zxp
链接:https://www.jianshu.com/p/12672880511a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

//测试代码

QString mypath;

mypath =QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);

qDebug()<<"QStandardPaths ::  "<<mypath;

输出结果:

QStandardPaths ::   "C:/Users/abc/AppData/Local/untitled1"  // win OS
QStandardPaths ::   "/home/abc/.config/untitled1"  //debian

临时文件路径

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 类的介绍。
————————————————
版权声明:本文为CSDN博主「liyuanbhu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liyuanbhu/article/details/53710249

.cache文件夹:存储应用缓存数据,

.config文件夹:存储了一部分应用程序的配置

.local文件夹:有点像/usr/local,里面也有bin文件夹,但是,存在这里的文件,只有该用户才能使用。

这是我的家目录的部分文件:

 其中.cache文件夹存储应用缓存数据,.config文件夹存储了一部分应用程序的配置,比如说我的 Chrome 浏览器配置就是那里面。

但是还有一部分应用程序并不把配置储存在.config文件夹,而是自己创建一个隐藏文件夹,存放自己的配置文件等等信息,比如你可以看到 Intellij 的配置文件就不在.config中。

最后说.local文件夹,有点像/usr/local,里面也有bin文件夹,也是存放可执行文件的。比如说我的 python pip 以及 pip 安装的一些工具,都存放在~/.local/bin目录中。但是,存在这里的文件,只有该用户才能使用。

这就是为什么,有时候普通用户可以使用的命令,用 sudo 或者超级用户却被告知找不到该命令。因为有的命令是特定用户家目录里的,仅被添加到了该用户的PATH环境变量里,只有他可以直接用。你超级用户想用当然可以,但是得写全绝对路径才行。

appdata是什么文件:

https://baijiahao.baidu.com/s?id=1629072228240716349&wfr=spider&for=pc

appdata下通常只有三个文件夹,它们分别是Local,LocalLow,Roaming,其实appdata就是xp里的application data.

有你在各种程序里的自定义设置, 包括程序里可以个性化设置而不能影响替他用户文件,临时文件夹,快速启动文件夹等.

简单地来说,都是用来存放软件的配置文件和临时文件的,里面有很多以软件名称或软件公司命名的文件夹。

Qt,如果你想通过串口(Serial Port)获取COM4或其他特定端口的数据,你需要使用Qt的QSerialPort模块。以下是一个基本示例,展示如何连接到COM4并读取数据: ```cpp #include <QCoreApplication> #include <QSerialPort> #include <QSerialPortInfo> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // 获取所有可用的串口信息 QSerialPortInfo portInfo; QList<QSerialPortInfo> availablePorts = portInfo.availablePorts(); // 检查COM4是否可用 bool isCom4Available = false; foreach (const QSerialPortInfo &info, availablePorts) { if (info.portName() == "COM4") { isCom4Available = true; break; } } if (isCom4Available) { QSerialPort serial("COM4"); // 设置波特率、校验位等属性(根据实际需求配置) serial.setBaudRate(9600); serial.setDataBits(QSerialPort::Data8); serial.setParity(QSerialPort::NoParity); serial.setStopBits(QSerialPort::OneStop); serial.open(QIODevice::ReadOnly); // 打开只读模式 if (!serial.isOpen()) { qWarning("无法打开COM4"); return -1; } QByteArray data; while (serial.bytesAvailable()) { data.append(serial.readAll()); // 在这里处理接收到的数据 QTextStream stream(&data); qDebug() << "Received: " << stream.readLine(); } serial.close(); // 关闭连接 } else { qWarning("COM4不可用"); } return app.exec(); } ``` 请注意,这只是一个基本示例,实际应用可能需要处理更多的错误情况和通信异常。在运行此代码之前,确保你的系统已经安装了所需的驱动程序,并且权限允许应用程序访问COM端口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值