在做Qt项目的时候,我们难免遇到到文件路径问题。 如QFile file("text.txt")加载不成功、QPixmap("../text.png") 加载图片不成功等等。今天就来做一个关于Qt路径问题的小结!

首先需要弄清楚两个概念:绝对路径与相对路径

绝对路径: 文件在硬盘上真正存在的路径。例如“text.jpg”这个图片是存放在硬盘
       的“E:\book\目录下,那么 “text.jpg”这个图片的绝对路径就是“E:\book\text.jpg"

相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系
      如当前file1的路径是/user/File/file1/file1.txt,
      File2的路径是/user/File/file2/file2.txt
      那么file2相对于file的路径就是“../file2/file2.txt”。
      相对路径里常使用“../”来表示上一级目录

弄清楚了上面两个概念,在来弄清楚我们常用到的“:/”与"./":

./  :  表示当前路径 如“./log/log1.txt” 表示当前路径下的log目录下的log1.txt。
:/  :  表示对资源的引用,引用资源文件路径 如“:/image/start.png” 表示资源文件里面定义的文件start.png。

现在我们来解释下QFile file("text.txt")加载不成功 ,如果text.txt是在可执行文件同级目录下,是可以打开的
的,否则则打不开

下面讲几个Qt常用的获取路径的函数

1 .获取应用程序可执行文件所在的目录: QCoreApplication::applicationDirPath();

QString applicationDirPath;
applicationDirPath = QCoreApplication::applicationDirPath();
qDebug()<<"applicationDirPath"<<applicationDirPath;

2.获取应用程序可执行文件的文件路径: QCoreApplication::applicationFilePath();

QString applicationFilePath;
applicationFilePath = QCoreApplication::applicationFilePath();
qDebug()<<"applicationFilePath"<<applicationFilePath;

3.获取应用程序当前工作目录的绝对路径:QString QDir::currentPath() (这个类似于“./”操作)

QString currentPath;
QDir dir;
currentPath=dir.currentPath();
qDebug()<<"path"<<currentPath;

将相对路径转化为绝对路径:

QDir temDir("../../image.png");
QString filePath = temDir.absolutePath();

这样就获得了一个文件的绝对路径了。

再来讲讲Qt资源系统:Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。 如果你的程序需要加载特定的资源(图标、文本翻译等), 那么,将其放置在资源文件中,就再也不需要担心这些文件的丢失。也就是说,如果你将资源以资源文件形式存储,它是会编译到可执行文件内部。

所以再来讲讲Qt资源文件qrc文件的创建。
方法1、使用qtdesinger创建.qrc文件
  (1)在资源管理器窗口中选择新建一个资源文件.qrc,保存文件即可;
  (2)在资源管理器窗口中选择添加资源和文件即可;

方法2、手工写文件的方法,.qrc可以用记事本打开,大概的形式是这样的:

<RCC>
<qresource prefix="/" > //前缀
<file>image/text.png</file>
</qresource>
</RCC>

然后在pro文件中添加一句

RESOURCES  = xxx.qrc

这样在使用的时候QPixmap(":/image/text.png");就能加载成功了

同时为了以后我们修改text.png路径的时候我们还需要一处处的修改源代码,所以在建立资源qrc的时候,给每个资源文件起一个别名
如 :

<RCC>
<file alias="image_copy.png">images/copy.png</file>
</RCC>

这时该文件可以通过QPixmap(":/image_copy.png");能加载成功。
  但通过QPixmap(":/images/copy.png");加载不成功,QT里“:/”表示对资源的引用,不是表示当前目录

==>使用别名是为了日后资源文件路径改变而去改动源代码。用别名后,只需要修改qrc文件即可!

Qt:路径问题小结的更多相关文章

  1. Qt中路径问题小结

    转载:奋斗Andy 在做Qt项目的时候,我们难免遇到到文件路径问题. 如QFile file("text.txt")加载不成功.QPixmap("../text.png& ...

  2. 【转】QT中添加的资源文件qrc时的路径问题小结

    @2019-06-13 [小记] QT中添加的资源文件qrc时的路径问题小结

  3. VC生成的DLL给QT的EXE调用时lib路径问题小结

    VC生成的DLL给QT调用,有两种方式,一种是隐式调用调用(使用.lib文件方式): ① 在*.pro工程文件中添加VC生成的lib文件路径时,或者使用一个绝对路径,如: LIBS += " ...

  4. Java Web开发中路径问题小结

     Java Web开发中,路径问题是个挺麻烦的问题,本文小结了几个常见的路径问题,希望能对各位读者有所帮助. (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 ...

  5. PyQt5 & Qt Designer使用小结

    开始在知乎写文章的原因,主要还是想整理平时的经验,方便自己以后查看,有机会的话大家也可以交流吧. 11月中旬由于项目需要,和另一名实习生负责使用Python开发一个数据分析的小软件. 虽然才开始接触Q ...

  6. QT QTableView用法小结

    QTableView常用于实现数据的表格显示.下面我们如何按步骤实现学生信息表格: 一 添加表头 //准备数据模型 QStandardItemModel *student_model = new QS ...

  7. 【转载】QT QTableView用法小结

    原始日期: 2016-08-16 09:28 来源:http://blog.csdn.net/wang_lichun/article/details/7805253 QTableView常用于实现数据 ...

  8. OpenCV/CUDA/Qt 环境配置小结

    OpenCV Qt CUDA windows环境下 配置 反复装过几次,每次都网搜攻略:自个做个记录 方便以后使用. 碰到OpenCV各种奇怪的错误 先看看 图片imread() 有没有读空 再找其他 ...

  9. 转载:QT QTableView用法小结

    出自: http://blog.chinaunix.net/uid-20382483-id-3518513.html QTableView常用于实现数据的表格显示.下面我们如何按步骤实现学生信息表格: ...

随机推荐

  1. mysql——操作数据库

    一.查看数据库 show databases; 二.创建数据库 create database 数据库名; 三.删除数据库 drop database 数据库名; 四.查看数据库存储引擎 show e ...

  2. Oracle表的Rowid字段

    Rowid 字段类型: Rowid 是一行数据的一个唯一标识. ROWID 是数据的详细地址,通过 rowid,oracle 可以快速的定位某行具体的数据的位置. ROWID 可以分为物理 rowid ...

  3. kafka安装使用配置1.1

    官方文档 rz上传到/usr/local/下 解压 tar xzvf 文件 改名 mv 文件 名字 环境变量 vi /etc/profile export KAFKA_HOME=/usr/local/ ...

  4. 第二大矩阵面积--(stack)牛客多校第二场-- Second Large Rectangle

    题意: 给你一幅图,问你第二大矩形面积是多少. 思路: 直接一行行跑stack求最大矩阵面积的经典算法,不断更新第二大矩形面积,注意第二大矩形可能在第一大矩形里面. #define IOS ios_b ...

  5. # 解决MongoDB突然无法连接的问题

    解决MongoDB突然无法连接的问题 使用命令,加上路径sudo mongod --dbpath=/var/lib/mongodb 这种情况一般是上一次使用的时候没有正常关闭数据库,正常启动:mong ...

  6. Linux服务器Java进程突然消失排查办法

    出处:JAVA进程突然消失的原因? 问题描述 在实际生产环境下,如果我们遇见Java进程突然消失,该如何去排查问题? 思路 可能有几种原因: ①.Java应用程序的问题:发生OOM导致进程Crash ...

  7. 【Tomcat】热部署的遗留配置导致服务器无法启动

    1.问题描述: 今天用myeclipse写了个小demo,然后用Tomcat7 部署了,接着点击启动服务器,服务器居然报错: 严重: Error starting static Resources j ...

  8. C++ 多态、虚函数(virtual 关键字)、静态联编、动态联编

    函数重写:(在子类中重写父类中的函数) 父类中被重写的函数  依然会继承  给子类. 子类中重写的函数将覆盖父类中的函数. 通过作用域分辨符  ::  可以访问到父类中的函数. 例如: #includ ...

  9. C# 文件基本操作

    概括的说,File,FileInfo,FileStream是用于文件 I/O 的类,StreamReader是用于从流读取和写入流的类,使用之前都需using System.IO. 先定义一个TXT文 ...

  10. 一款完美代替微信小程序原生客服消息的工具:

    一.设置:无需开发,多种回复(自动+人工)   自动回复形式有3种: 打开客服消息(用户只要和客服互动过一次,再次点击进入,会收到设置好的自动回复) 关键词回复(用户在小程序中回复某个关键词内容时,会 ...