Qt&VS - 如何创建带界面动态库

前言

最近接触的项目中,按界面分工后采用动态库的方式交付给同事整合调用。开发环境为 Qt+VS ,刚开始接触 VS 有点扎心,特此记录。

Qt中动态库的创建

QtCreator可以通过向导创建动态库,非常 amazing。

在这里插入图片描述
在本处示例的 testdll 中, 值得注意的是:

pro

//...
TEMPLATE = lib
DEFINES += TESTDLL_LIBRARY

testdll_global.h

#ifndef TESTDLL_GLOBAL_H
#define TESTDLL_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(TESTDLL_LIBRARY)
#  define TESTDLLSHARED_EXPORT Q_DECL_EXPORT
#else
#  define TESTDLLSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // TESTDLL_GLOBAL_H

testdll.h

#ifndef TESTDLL_H
#define TESTDLL_H

#include "testdll_global.h"

class TESTDLLSHARED_EXPORT Testdll
{

public:
    Testdll();
};

#endif // TESTDLL_H

可以发现它主要是借助了宏定义去控制头文件中 class 的修饰符

  • Q_DECL_EXPORT
    __declspec(dllexport),表示 导出dll
  • Q_DECL_IMPORT
    __declspec(dllimport),表示 导入dll

Qt 界面类

采用向导,非常easy。

在这里插入图片描述
新建App;如果是编写界面类,一般基类选择QWidget

在这里插入图片描述

带界面的动态库

我们仅需要创建界面类,在头文件中加入宏定义

#if defined(__DLL_LIBRARY)
#  define  xxx_EXPORT __declspec(dllexport)
#else
#  define xxx_EXPORT __declspec(dllimport)
#endif

并将 xxx_EXPORT 修饰于 class

值得注意的是 __DLL_LIBRARY 最好在 项目配置 中添加,避免打包时忘记修改导致编译错误:不允许 dllimport 静态数据成员 的定义。

Qt中可在 pro文件 中添加:

DEFINES += __DLL_LIBRARY

VS 中则在此处添加:

在这里插入图片描述

测试程序

编译完成后需要将 *.h*.dll*.lib 一起打包。

QT 测试程序中可使用导入库文件向导:·
在这里插入图片描述
并在 UI界面 中创建一 QWidget

在这里插入图片描述
通过提升的方式调用:

在这里插入图片描述

若在 VS 中则需配置一下属性:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值