将QT界面程序封装成动态库DLL

本文最后更新于:2022年5月29日 上午

本文记录如何将qt界面程序封装为动态链接库DLL的方法。

前言

在开发大型项目的时候,有时候会经常使用一些通用的界面框架,把这些界面框架封装成动态库,会使得程序变得更加方便扩展,本文记录如何将qt界面程序封装为动态链接库DLL的方法。

系统环境:

  • Windows 10
  • Qt5.9.3

方法/步骤

1、在QtCreator创建一个C++库

如下图。我们要创建的是动态库,windows平台最终生成的是dll文件,而linux下则是so文件。

image-20210630094511821

image-20210630095048229

2、选择编译器以及相关的模块

编译器根据自己项目需求选择即可。

image-20210630095219980

模块选择了widget和core两个,对于一般的界面,这两个就足够了。然后我们还是点下一步,如下图,直到项目创建完毕。

image-20210630095354806

image-20210630095413450

image-20210630095425156

3、目录结构

下图是创建完工程后的目录结构

image-20210630095611021

这里lcdclock.h主要是有这个共享库的宏声明,如下图。

image-20210630095801708

4、添加UI界面

鼠标右键点击左边目录结构的项目名称,选择添加ui界面。如下图。

image-20210630100222097

image-20210630100250698

image-20210630100624860

image-20210630100653798

image-20210630100709914

image-20210630100740052

新创建的界面类文件如下图所示,ui界面文件已经成功创建。

image-20210630100842437

5、修改项目文件

  1. 打开头文件lcdclock.h,之前的那个共享库的宏”LCDCLOCKSHARED_EXPORT“没有了,lcdclock_global.h头文件也没有了,所以这里我们需要添加上才行的。直接把lcdclock_global.h的内容复制过来即可,如下图。

    image-20210630101433787

  2. 修改一下项目文件LCDClock.pro。如下图,这里就出现了重复文件包含,这是由于刚才生成文件的时候QtCreator没有判重导致的。在pro文件把重复包含的部分删除即可。

    image-20210630101700328

    image-20210630102028605

6、设计UI界面

这里使用LCD设计一个简单的计时器为例。

image-20210630102903303

7、编译生成动态库文件

选择Release进行编译,目标文件就在项目的编译目录下。

image-20210630103030726

image-20210630103510809

可以在编译目录下生成了dll可lib文件。

image-20210630103632175

测试使用界面动态链接库

1、新建测试项目

新建另一个项目,这里创建的是widget app项目,按照普通流程进行创建即可。

image-20210630104010261

2、添加库文件和头文件

把上面项目中生成的库文件LCDClock.dll、LCDClock.lib和头文件lcdlock.h复制到新建的测试工程目录下。如下图。

image-20210630104333869

  1. 添加上面项目中的库文件。

    image-20210630104131528

    image-20210630104150388

    image-20210630104731871

    image-20210630104951501

    添加完成后,pro文件自动生成链接依赖。

    image-20210630105034554

  2. 添加头文件lcdclock.h

    image-20210630105421549

    image-20210630105459471

  3. 修改lcdclock.h

    image-20210630105836226

3、运行

在main.cpp中定义一个界面类对象,编译运行,结果如下,出现了上面创建的界面。

image-20210630110718950

image-20210630110833935


将QT界面程序封装成动态库DLL
https://kevinloongc.github.io/posts/c8226e0d.html
作者
Kevin Loongc
发布于
2021年6月30日
许可协议