Qt中路径问题小结
转载:奋斗Andy
在做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常用的获取路径的函数:
.获取应用程序可执行文件所在的目录: QCoreApplication::applicationDirPath();
QString applicationDirPath;
applicationDirPath = QCoreApplication::applicationDirPath();
qDebug()<<"applicationDirPath"<<applicationDirPath; .获取应用程序可执行文件的文件路径: QCoreApplication::applicationFilePath();
QString applicationFilePath;
applicationFilePath = QCoreApplication::applicationFilePath();
qDebug()<<"applicationFilePath"<<applicationFilePath; .获取应用程序当前工作目录的绝对路径: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中路径问题小结的更多相关文章
- Java Web开发中路径问题小结
Java Web开发中,路径问题是个挺麻烦的问题,本文小结了几个常见的路径问题,希望能对各位读者有所帮助. (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 ...
- Java Web开发中路径问题小结(getRequestUrl getContextUrl getServletUrl)
看以博客感觉不错,分享一下http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html (1) Web开发中路径的几个基本概念 假设 ...
- Qt:路径问题小结
在做Qt项目的时候,我们难免遇到到文件路径问题. 如QFile file("text.txt")加载不成功.QPixmap("../text.png") 加载图 ...
- Java Web 开发中路径相关问题小结
Java Web开发中路径问题小结 (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 Eclipse中目录结构如图2所示: 图2 那么针对这个站点的几个基本概 ...
- 【转】QT中添加的资源文件qrc时的路径问题小结
@2019-06-13 [小记] QT中添加的资源文件qrc时的路径问题小结
- 【Qt开发】qt中涉及到空格包含路径的解决办法
qt中涉及到空格路径,qmake是无法正确编译的. 需要在空格路径前面加上$$quote INCLUDEPATH += $$quote(C:/Program Files/MySQL/MySQL Ser ...
- 第38课 Qt中的事件处理(上)
1. GUI程序原理回顾 (1)图形界面应用程序的消息处理模型 (2)思考:操作系统发送的消息如何转变为Qt信号 2. Qt中的事件处理 (1)Qt平台将系统产生的消息转换为Qt事件 ①Qt事件是一个 ...
- 第32课 Qt中的文件操作
1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...
- 第47课 Qt中的调色板
1. QPalette类 (1)QPalette类提供了绘制QWidget组件的不同状态所使用的颜色. (2)QPalette对象包含了3个状态的颜色描述 ①激活颜色组(Active):组件获得焦点使 ...
随机推荐
- Java——文件过滤器
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- (C/C++学习笔记) 十七. 面向对象程序设计
十七. 面向对象程序设计 ● 面向对象程序设计的基本概念 ※ 类实际上是一种复杂的数据类型,它不仅包含不同类型的数据,还包含对这些数据的一些必要的操作. 而对象则是这种复杂的数据类型的一个变量. 类是 ...
- delete p和delete [] p的区别(转)
operator new 和 operator delete函数有两个重载版本,每个版本支持相关的new表达式和delete表达式: void* operator new (size_t); // a ...
- AE项目打包
Holinz AE项目打包 打包详细信息:Setup Factory 7.0打包软件,VS2005+AE92下的Winform项目1.依赖项: Dot Net Framework20 AO ...
- DevExpress v17.2—WPF篇(一)
用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v17.2 新的Hamburger Menu.Sched ...
- php require include 区别
php提供了两种包含外部文件的方法:include()和require().include()语句是一个常规的php函数:而require() 是一种特殊的语言结构,它的使用受到一些限制.对这两者来说 ...
- magento导航栏中如何加入home主页
magento在导航栏中加入home主页是很简单的,几个步骤即可在magento导航栏中加入home主页! 下面简单介绍下如何在magento导航栏中加入home主页: 首先我们打开对应应用的模板文件 ...
- Android Studio中设置提示函数用法
Eclipse有一个很好的功能,就是当你代码调用某个android API时,鼠标移到对应的函数或者方法上,就会自动有一个悬浮窗提示该函数的说明(所包含的参数含义,该方法功能).迁移到Android ...
- matlab repmat()
一.B = repmat(A,m,n) 将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成.B 的维数是 [size(A,1)*m, size(A,2)*n] ...
- 【计算机视觉】如何使用于仕琪老师的libfacedetect人脸检测库
前言 最近又开始进行人脸检测方向的内容,看到于仕琪老师的多角度检测想试一下,还不清楚原理,先测试效果如何. libfacedetect人脸检测库是深圳大学于仕琪老师发布的开源库,与opencv自带的人 ...