zoukankan      html  css  js  c++  java
  • Q_INIT_RESOURCE宏

     

    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))

  • 相关阅读:
    Mac挂载分区
    连接SFTP命令
    【转】10.13.6蓝牙失效的解决方法(Broadcom-BCM94352z-DW1560)
    Jetbrains2020系列配置路径变动(Pycharm2020双击无法打开)
    libtorch 常用api函数示例(史上最全、最详细)
    有用链接
    cuda 编程1
    CMakeLists.txt
    模型压缩--剪枝,tensorrt实验调研
    iou map TP TN FP FN Precision Recall
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3944201.html
Copyright © 2011-2022 走看看