在最近的Qt相关项目开发中,有不同客户提出更改logo图片的需求,每次更换一张图片需要重新添加到.qrc资源文件,并重新编译源代码生产可执行文件,操作效率极低,频繁修改源代码也 容易引起其他不可靠问题,故想把部分做成动态加载的形式。在网络上查阅相关资料后解决了这一问题,总结一下以便以后参考查阅。

我们大家都知道,在qt框架中,资源文件后缀名是以.qrc结尾的。它可以将我们的图片文件、qml、与样式表文件等装进可执行程序中。我们将怎样做呢?一般情况下,我们在Qt Creator项目右键添加新文件,选择Qt Resource File。之后输入名字,项目中就有资源管理文件了。

.qrc文件里是以xml格式管理资源文件的,如下:

.qrc文件里是以xml格式管理资源文件的,如下:

<RCC>
    <qresource prefix="/images">
        <file alias="icon">images/logo.ico</file>
        <file alias="title">images/title.png</file>
        <file alias="closeBtn">images/gb1.png</file>
    </qresource>
    <qresource prefix="/qss">
        <file alias="stylesheet">stylesheet.qss</file>
    </qresource>
    <qresource prefix="/SearchItem">
        <file alias="SearchItemFile">SearchItem/SearchItemColor.dat</file>
    </qresource>
</RCC>

这里面有三种文件:图片(图标)、.qss(样式表)、.dat文件格式。

使用的时候我们有两种方式:

  1. :/images/title.png        (eg:    QPixmap image0("://image/navigation.png");  QPixmap image = image0.scaled(QSize(pt2px(64), pt2px(64)));QIcon icon = QIcon(image);)

  2. qrc:///images/title.png </span>

此路径就是图片文件在qrc文件中的路径。

为了更好地保护我们的图片安全,我们应该尽可能的将项目的功能源码与资源文件分离开来,如果只是改变图标之类的改变,就不需要重新编译源代码了。具体我们该怎样做呢?

1.使用QT Creator 新建一个资源文件.qrc。这时候,这个资源文件并不是属于任何项目的。

2.在.qrc存放的目录下新建images文件夹(用于存放项目所有的图片)与styleSheet文件夹(用于存放样式表文件.qss)。

(文件存放的路径可自定义)

3.用qt creator打开resource.qrc,然后将images文件夹与qss文件夹里的所有文件添加到qrc文件里。

4.使用rcc 命令将resource.qrc生成.rcc二进制文件。

rcc --binary resource.qrc -o skin.rcc(Windows)    (Linux下执行命令为rcc -binary resource.qrc -o skin.rcc)

至此,我们的资源文件已经分离开并且已经做成了二进制文件。那么程序中怎样使用的呢?

5.在项目的可执行目录下新建skin文件夹。将生成的skin.rcc放到skin文件夹里。

6.在qt程序启动的时候,加载一下资源文件

QResource::registerResource(qApp->applicationDirPath() + "/skin/skin.rcc");  
    QFile file(":/qss/stylesheet");  
    if(file.open(QFile::ReadOnly))  
    {  
      QString strStyleSheet = file.readAll();  
      file.close();  
      qApp->setStyleSheet(strStyleSheet);  
    }
 好了,到这里我们就完成了所有工作,将资源文件与源码文件完全分离开来,如果只是更换资源文件,就不用重新编译主程序了,只需重新生成skin.rcc文件,然后替换一下就大功告成了!

以上方法亲测可行,感谢网友分享!文章原地址:https://blog.csdn.net/xiezhongyuan07/article/details/79396680

QT qss资源文件与代码分离的更多相关文章

  1. qt qrc 资源文件

    qt  qrc 资源文件 qt  qrc 资源文件 qt  qrc 资源文件

  2. Qt 添加资源文件

    *本人乃小白,博文主要用于个人记录,不保证内容准确无误* 我们编写的gui可能需要一些额外的资源(比如贴图用的图片),可用资源文件统一管理.以下以图片为例. 用qt creator 打开工程,为工程新 ...

  3. qt 创建资源文件

    我们编写的gui可能需要一些额外的资源(比如贴图用的图片),可用资源文件统一管理.以下以图片为例. 用qt creator 打开工程,为工程新建资源文件: 命名为“项目名.prc”,(此处为“cloc ...

  4. vs+qt使用资源文件

    1.在Resources目录新建一个.qrc文件 2.在解决方案的Resource Files中添加这个文件 3.为这个qrc添加资源,建议把资源都放进Resources

  5. QT添加资源文件,并为工具栏添加图片

    1.右键工程,添加新文件,QT,QT Resource File. 2.选择res,添加前缀,添加文件,(把图片放在文件夹里,把文件夹放在工程目录下)选择图片 3.在ui中,下方有个Action Ed ...

  6. qt添加资源文件方法

    File->new file->file and classes->Qt->qt resources->   add name   add->add prefix- ...

  7. [转] 解析Qt资源文件使用

    解析Qt资源文件使用 转自:http://mobile.51cto.com/symbian-270121.htm 本文详细的介绍了Qt文件的使用,和大部分GUI框架设计工具一样,Qt也引入了资源文件系 ...

  8. 如何在Qt资源文件中包含和释放exe等各种类型文件?

    操作系统:Windows 10 X64 企业版 Qt: 5.8.0 QtCreater: 4.2.1 刚刚开始学习Qt,不断遇到困难和挑战,前几天在各个QQ群里询问如何在Qt的资源文件中包含和释放ex ...

  9. Windows下 Qt 资源文件(.qrc)文件 的 编写与应用

    最近遇到一些项目都包含了qrc文件,这个是Qt的资源文件,如果在pro文件中不包含的话,在编译的时候会提示找不到相应资源的错误. 下面说一下手动修改pro和编写qrc文件的方法. 我们直接在命令行下执 ...

随机推荐

  1. Click One客户端安装后将安装目录删除,再从服务器下载安装无法安装解决办法

    报错信息: 平台版本信息 Windows : 6.1.7601.65536 (Win32NT) Common Language Runtime : 4.0.30319.42000 System.Dep ...

  2. 再谈HTTP2性能提升之背后原理—HTTP2历史解剖

    即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...

  3. [ISSUE] [Centos] Centos Start Nginx Show: Failed to start nginx.service:unit not found

    CMD Line:systemctl start nginx.serviceFailed to start nginx.service: Unit not found. Solution: 1.vim ...

  4. 解析搜狗实验室精简版数据:1、批量将.txt编码格式转化为utf8 2、解析提取数据

    在搜狗实验室里下载了精简版的数据,解压后是一个文件,里面有很多个.txt文档,里面编码格式都是ASCII.现需要将这些编码格式转化为utf-8,以下是python3语言编写的脚本,一般只需改变path ...

  5. /bin, /sbin & /usr/bin, /usr/sbin & /usr/local/bin, /usr/local/sbin & glibc

    操作系统为自身完成启动所需要的 /bin, /sbin 系统基本管理所需要的 /usr/bin, /usr/sbin 第三方的 /usr/local/bin, /usr/local/sbin 核心库 ...

  6. kvm和qemu交互处理io流程

    1.IO虚拟化的分类 (1)全虚拟化:宿主机截获客户机对I/O设备的访问请求,然后通过软件模拟真实的硬件.这种方式对客户机而言非常透明,无需考虑底层硬件的情况,不需要修改操作系统. QEMU模拟I/O ...

  7. 跨域请求携带cookie

      function ajaxPostRequestCipherMachine(url, param) { var url = url; var dict = { 'ret' : false, 'er ...

  8. 'scope' is defined but never used

    错误如下: 解决办法: 1.scope这个属性在最新版本vue已经被弃用,升级成slot-scope了 ,所以属性名应该改为slot-scope. 2.如上所示,我们发现,还是有报错,原因是vetur ...

  9. 1344:【例4-4】最小花费 dijkstra

    1344:[例4-4]最小花费 Dijkstra (1)a [ i ] [ j ] 存转账率(..转后所得率..) (2)dis [ i ] 也就是 a [ 起点 ] [ i ] (3)f [ i ] ...

  10. 用iPhone查看pc电脑上写的html(Mac电脑Charles)简单版

    对于客户端同学开发来说,写一段代码想在真机上看看,是非常容易的. 那么在这么一个大前端的环境下,客户端开发想写点html和js代码,又想在手机上看看效果,怎么办呢? 需要以下几个步骤: 大体流程:1. ...