【Qt之·路径获取】

ops/2024/10/18 4:18:43/

系列文章目录


文章目录

  • 前言
  • 一、使用相对路径
    • 1.1 相对路径
    • 1.2 绝对路径
    • 1.3 QDir类
    • 1.4 QFileDialog对话框
  • 二、示例
    • 2.1 示例一
  • 总结


前言

  在进行Qt开发时,经常需要获取文件的路径,如图片、音频、配置文件等。路径的获取可以通过直接指定绝对路径或者使用相对路径的方式来实现。本篇博客将介绍如何在Qt中获取文件路径的方法。


在Qt中,常用的获取路径的方法有以下几种:

一、使用相对路径

1.1 相对路径

相对路径是相对于当前工作目录的路径,可以通过qApp->applicationDirPath()来获取当前应用程序的路径。

QString path = qApp->applicationDirPath() + "/image/logo.png";

在上面的例子中,我们将图片的路径设置为当前应用程序的路径下的image文件夹中的logo.png文件。

1.2 绝对路径

绝对路径是从文件系统的根目录开始的路径,可以直接指定文件的全路径来获取。

QString path = "/home/user/image/logo.png";

1.3 QDir类

QDir类提供了一系列方法来获取文件路径。例如,通过dir.exists()方法可以判断文件或目录是否存在,通过dir.absolutePath()方法可以获取文件或目录的绝对路径。

QDir dir("/home/user/image");
if (dir.exists()) {QString path = dir.absolutePath() + "/logo.png";
}

在上面的例子中,我们首先判断了image目录是否存在,如果存在则拼接出了图片的绝对路径。

1.4 QFileDialog对话框

QFileDialog对话框提供了一个文件选择的界面,可以让用户选择文件并返回文件路径。

QString path = QFileDialog::getOpenFileName(this, "选择图片", qApp->applicationDirPath(), "图片文件(*.jpg *.png)");

在上面的例子中,我们使用了QFileDialog::getOpenFileName()方法来打开一个文件选择对话框,用户选择完文件后返回文件的路径。

二、示例

2.1 示例一

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QStandardPaths>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//获取程序所在路径QString applicationDirPath = QCoreApplication::applicationDirPath();qDebug() << "applicationDirPath=" << applicationDirPath;//程序的完整路径QString applicationFilePath = qApp->applicationFilePath();qDebug() << "applicationFilePath=" << applicationFilePath;//当前工作目录QString currentPath = QDir::currentPath();qDebug() << "currentPath=" << currentPath;//用户目录路径QString HomeLocation = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);qDebug() << "HomeLocation=" << HomeLocation;QStringList HomeLocation2 = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);qDebug() << "HomeLocation2=" << HomeLocation2[0];//我的文档路径QString DocumentsLocation = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);qDebug() << "DocumentsLocation=" << DocumentsLocation;QStringList DocumentsLocation2 = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);qDebug() << "DocumentsLocation2=" << DocumentsLocation2[0];//桌面路径QString DesktopLocation = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);qDebug() << "DesktopLocation=" << DesktopLocation;QStringList DesktopLocation2 = QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);qDebug() << "DesktopLocation2=" << DesktopLocation2[0];//程序数据存放路径QString AppDataLocation = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);qDebug() << "AppDataLocation=" << AppDataLocation;QStringList AppDataLocation2 = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);qDebug() << "AppDataLocation2=" << AppDataLocation2[0];/*Qt5.5 中引入了另一种方法*/QString AppConfigLocation = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);qDebug() << "AppConfigLocation=" << AppConfigLocation;QStringList AppConfigLocation2 = QStandardPaths::standardLocations(QStandardPaths::AppConfigLocation);qDebug() << "AppConfigLocation2=" << AppConfigLocation2[0];//临时文件路径QString TempLocation = QStandardPaths::writableLocation(QStandardPaths::TempLocation);qDebug() << "TempLocation=" << TempLocation;QStringList TempLocation2 = QStandardPaths::standardLocations(QStandardPaths::TempLocation);qDebug() << "TempLocation2=" << TempLocation2[0];//更传统的方法是利用QDir的一个静态函数tempPath()QString tempPath  = QDir::tempPath();qDebug() << "tempPath=" << tempPath;system("pause");return a.exec();
}

总结

  总之,在进行Qt开发中,获取文件路径是一个常见的操作,根据具体需求选择合适的方法获取文件路径能够更加方便地进行文件的读取、写入、显示等操作。


http://www.ppmy.cn/ops/27376.html

相关文章

RuoYi-Vue-Plus (SPEL 表达式)

RuoYi-Vue-Plus 中SPEL使用 DataScopeType 枚举类中&#xff1a; /*** 部门数据权限*/DEPT("3", " #{#deptName} #{#user.deptId} ", " 1 0 "), PlusDataPermissionHandler 拦截器中定义了解析器&#xff1a; buildDataFilter 方法中根据注解的…

TCP/IP和HTTP协议

TCP/IP OSI 七层模型在提出时的出发点是基于标准化的考虑&#xff0c;而没有考虑到具体的市场需求&#xff0c;使得该模型结构复杂&#xff0c;部分功能冗余&#xff0c;因而完全实现 OSI 参考模型的系统不多。而 TCP/IP 参考模型直接面向市场需求&#xff0c;实现起来也比较…

【C语言】编译与链接

1.翻译环境与运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 1.翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令&#xff08;二进制指令&#xff09; 2.执行环境&#xff0c;它用于实际执行代码 2.翻译环境 那么翻译环境是怎么将源代码…

STM32 F103C8T6学习笔记17:类IIC通信—MLX90614红外非接触温度计

今日学习配置MLX90614红外非接触温度计 与 STM32 F103C8T6 单片机的通信 文章提供测试代码讲解、完整工程下载、测试效果图 本文需要用到的大概基础知识&#xff1a;1.3寸OLED配置通信显示、IIC通信、 定时器配置使用 这里就只贴出我的 OLED驱动方面的网址链接了&#xff1a…

Rust 命令行参数解析指南

0x00 前言 通过 Rust 的 Governance 可以看到 Rust 的通过三种方式管理社区&#xff1a; RFC processTeamsWorking Groups 在 Working Groups 中我发现竟然有一个叫 Command-line interfaces (CLI) working group 的工作组(简称 WG-CLI)。很明显&#xff0c;如果 Rust 对于 …

BCSP-X 2024第一轮报名开始啦!

BCSP-X 2024第一轮报名开始啦! 2024北京中小学信息学能力测评活动(BCSP-X 2024)第一轮即将开始,4月20日起开始报名。本次活动包括基础知识测评和编程能力测评两部分,不收取任何费用。 重要时间节点 基础知识测评报名:4月20日-5月12日17:00基础知识测评:5月19日9:30-11:30基础…

张鸣独到解读:规矩与自信的政治影响

在当今多变的政治舞台上&#xff0c;学者张鸣教授以其犀利而深邃的视角&#xff0c;对规矩与自信提出了新的解读。他的言论不仅引发了公众的广泛关注&#xff0c;也为我们提供了思考社会政治问题的一个新的角度。张教授指出&#xff0c;规矩并非僵化的教条&#xff0c;而应是动…

iNav开源代码之研读分析篇章目录梳理

iNav开源代码之研读分析篇章目录梳理 1. 源由2. 基础篇章3. 代码篇章4. 场景篇章5. 异常篇章6. 总结7. 参考资料 1. 源由 之前有介绍过Betaflight/PX4/ArduPilot&#xff0c;虽然iNav代码和Betaflight类似&#xff0c;但是针对iNav系列的没有整理过一个总的目录。 今天打算也…