Qt 动态库的编译和使用

一.概述

~~ 最近项目需要,需要将部分自己写的控件组件化,要求要将部分自己写的控件封装成动态库。于是,网上学习了一下,幸不辱命,成功生成了动态库,并且可以被调用。下图的仪表是我想封装成库的类:
Qt 动态库的编译和使用_第1张图片
~~ win 下动态链接库的后缀为 xxx.dll, 静态库为 libxxx.a

二.动态库生成

1.新建一个C++库工程
Qt 动态库的编译和使用_第2张图片
2.类型选择 共享库
Qt 动态库的编译和使用_第3张图片
3.根据需要勾选要选择的模块,由于我要用到QWidget,所以将“QtWidgets”选项选上。Qt 动态库的编译和使用_第4张图片
4.一直下一步,直到完成,此时,项目文件是这样的
Qt 动态库的编译和使用_第5张图片
mydial.h

#ifndef MYDIAL_H
#define MYDIAL_H

#include "mydial_global.h"

class MYDIALSHARED_EXPORT MyDial
{

public:
    MyDial();
};

#endif // MYDIAL_H

mydial.cpp

#include "mydial.h"


MyDial::MyDial()
{
}

mydial_global.h

#ifndef MYDIAL_GLOBAL_H
#define MYDIAL_GLOBAL_H

#include 

#if defined(MYDIAL_LIBRARY)
#  define MYDIALSHARED_EXPORT Q_DECL_EXPORT
#else
#  define MYDIALSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // MYDIAL_GLOBAL_H

4.点击编译按钮,编译工程,弹出如下对话框,则编译成功,会在构建路径下生成了动态库和静态库。
Qt 动态库的编译和使用_第6张图片
Qt 动态库的编译和使用_第7张图片
5.这里成功生成了库文件。但是距离我的仪表类的代码还没有合并过去。
在工程中重新新建一个名为 MyDial 的qt 设计师界面,覆盖掉原来的myDial.cpp和myDial.h。
并且,修改myDial.h,在类的构造函数 定义前加上 宏 MYDIALSHARED_EXPORT
如下:
Qt 动态库的编译和使用_第8张图片
使用这种覆盖掉原来文件的方式新建文件,需要同步修改.pro工程文件(Qt有点傻),删掉重复包含的文件
Qt 动态库的编译和使用_第9张图片
Qt 动态库的编译和使用_第10张图片
然后将仪表类的代码合入mydial.cpp 、mydial.h 、mydial.ui
6.重新编译动态库。

二.调用动态库

调用动态库必要条件:定义动态库的头文件动态库文件
步骤:
1.新建一个普通的qt界面工程。
2.工程文件中添加 库的寻找路径 。
3.我在工程目录内新建一个“include”文件夹,并将动态库的头文件放到里面。
4.在工程中添加动态库头文件。
5.在要调用的地方包含动态库头文件,然后就可以调用库的内容啦。
Qt 动态库的编译和使用_第11张图片
调用库中的内容:
Qt 动态库的编译和使用_第12张图片
运行实际效果图:
Qt 动态库的编译和使用_第13张图片

参考链接:
https://jingyan.baidu.com/article/27fa73265018c246f9271f40.html
https://blog.csdn.net/u011236602/article/details/80835575

你可能感兴趣的:(Qt)