QT应用程序,无论是exe,staticlib,还是dll程序,都可以通过qrc文件来导入各种资源。

qrc会将这些资源文件转换为相应代码,参与应用程序的编译。

这样做的好处就是:简化了应用程序发布时还需要同步发布各类资源文件的烦恼,

缺点就是:应用程序会相对变大;

但是,如果我们创建的事staticlib工程,(staticlib工程的创建是通TEMPLATE=lib, LIB = staticlib的pro文件实现),那在引用lib文件的工程中,就需要试用 Q_INIT_RESOURCE宏来显示初始化资源,例如:

libstest是一个静态库,它通过libtest.qrc文件引入资源;

libtestapp是试用libtest.lib的exe程序,则在libtestapp中,需要显示通过Q_INIT_RESOURCE宏初四花libtest的资源;

如下:

Q_INIT_RESOURCE(libtest) // qrc文件名。

通过QT源代码可以发现:Q_INIT_RESOURCE宏对应生成了两个库函数:

#define Q_INIT_RESOURCE(name) \
    do { extern int QT_MANGLE_NAMESPACE(qInitResources_ ## name) ();       \
        QT_MANGLE_NAMESPACE(qInitResources_ ## name) (); } while (0)
#define Q_CLEANUP_RESOURCE(name) \
    do { extern int QT_MANGLE_NAMESPACE(qCleanupResources_ ## name) ();    \
        QT_MANGLE_NAMESPACE(qCleanupResources_ ## name) (); } while (0)

而qrc在将qrc文件转换为相应代码时,会实现qInitResources_name和qCleanupResources_name函数,如下:

QT_BEGIN_NAMESPACE

extern Q_CORE_EXPORT bool qRegisterResourceData
    (int, const unsigned char *, const unsigned char *, const unsigned char *);

extern Q_CORE_EXPORT bool qUnregisterResourceData
    (int, const unsigned char *, const unsigned char *, const unsigned char *);

QT_END_NAMESPACE

int QT_MANGLE_NAMESPACE(qInitResources_q6800app)()
{
    QT_PREPEND_NAMESPACE(qRegisterResourceData)
        (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
    return 1;
}

Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_q6800app))

int QT_MANGLE_NAMESPACE(qCleanupResources_q6800app)()
{
    QT_PREPEND_NAMESPACE(qUnregisterResourceData)
       (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
    return 1;
}

Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_q6800app))

Q_INIT_RESOURCE宏相关推荐

  1. Qt开发技术:Qt的动态静态插件框架介绍和Demo

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105481285 长期持续带来更多项目与技术分 ...

  2. Qt-Q_INIT_RESOURCE

    原型:void Q_INIT_RESOURCE ( name ) 说明:通过初始化使用指定的基本名称.qrc文件中指定的资源.通常情况下,Qt的资源在启动时会自动加载.该Q_INIT_RESOURCE ...

  3. QT里的函数void Q_INIT_RESOURCE ( name )

        QT里的函数voidQ_INIT_RESOURCE ( name ) Initializesthe resources specified by the .qrc file with the ...

  4. C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define

    C/C++预处理器在源代码编译之前对其进行一些文本性质的操作. 它的主要任务包括删除注释 . 插入 #include 指令包含的文件的内容 . 定义和替换由 #defme 指令定义的符号以及确定代码的 ...

  5. OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)

    1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...

  6. TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成

    TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成 这个PR增加了对分区.编译和运行TensorRT BYOC目标的支持. Building 有两个新的cmake标志: ...

  7. 打开word出现“您正试图运行的函数包含有宏或需要宏语言支持的内容。”的解决方法

    1.Word选项→加载bai项→管理→转到--,转到→把勾勾都取消→确定即可. 2.工具→宏->安全性→可靠发行商,将下方的选择框中的钩清空,再将宏安全性改为最高. 3.可能是初次安装Offic ...

  8. C++ #define(宏定义)的使用

    C++ 宏定义 #define命令是C++语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 宏定义的一般形式 #define <宏名& ...

  9. 宏使用 Tricks

    人为地定义一些"无意义"的宏(宏名本身有意义),以起到提升代码程序的可读性. 1. IN/OUT 指定参数用于输入还是输出: #define IN #define OUTvoid ...

最新文章

  1. 天线3db波束宽度_天线的主瓣波束宽度越窄天线增益越高.PPT
  2. 大数据处理——Hadoop解析(一)
  3. 创建型模式 简单工厂模式
  4. 126.数据链路层有哪些协议?
  5. 无法嵌入互操作类型 请改用适用的接口_机器视觉可用的不同电缆和连接器类型以及相关利弊分析...
  6. 匿名函数python_基于python内置函数与匿名函数详解
  7. 机器学习速成课程 | 练习 | Google Development——编程练习:创建和操控张量
  8. 学计算机的会excel,超级容易学电脑--Excel电子表格
  9. VDI环境的性能利器——固态存储
  10. (原创)用cmd命令制作恶搞程序
  11. halo博客:如何加快搜索引擎收录网站速度
  12. 3717 bLue的文件查找器
  13. python中迭代_python中的迭代什么意思
  14. TC Games教你如何在电脑上玩手游梦幻西游,无需模拟器
  15. 安装quagga(虚拟路由器)
  16. Shell小技巧(一百三十一)服务器tcp连接数实时统计
  17. Ubuntu 12 ulimit 系统最大打开文件个数 设置
  18. linux 剪刀石头布c语言,利用C语言编写“剪刀石头布”小游戏
  19. 编程小白的人工智能路之Gabor滤波提取掌纹特征并对比掌纹相似度(一)
  20. 提升开发效率N倍的20+命令行神器!(附 demo)

热门文章

  1. 苹果开放降级通道_iOS 13再见了!iOS随意降级工具即将来到~
  2. FTPRush.v1.1.219.Unicode-YAG
  3. 2022-2028全球与中国紫外线发生器市场现状及未来发展趋势
  4. 解锁!玩转 HelloGitHub 的新姿势
  5. 【云原生】五年博主教你用阿里云Serverless免费额度搭建个人应用服务, 还不赶快上车。
  6. c语言读硬盘温度,Windows自带API获取硬盘温度、硬盘使用时间、以及硬盘内存使用情况(包括总内存,空闲内存,已用内存)...
  7. 【原创】第一个iOS应用程序
  8. 面向对象:叶子的离开是风的追求还是树的不挽留?我若是飘离的叶子,你是否是温润我的春泥?
  9. zip压缩包密码破解
  10. 2019云栖大会丨数字冰雹诠释行业大数据可视决策