一、前言
为了实现代码的高度耦合和后期维护,常采用前后端分离的方式,在QT的Qwidget中亦是如此。通常将UI用QT封装的库编写,其他工具类后端代码用C++类库实现,最后添加项目引用即可。
二、动态库的创建
1.新建VS动态库模板
2.封装自己需要的类,本例子设计一个供外部调用的类和类库自己的类
给外部调用的类:
#pragma once
#ifdef DLL_IMPLEMENT
#define LIB_TOOL_DLL _declspec(dllexport)
#else
#define LIB_TOOL_DLL _declspec(dllimport)
#endif
#include"SimpleTwo.h"
class LIB_TOOL_DLL SimpleDll
{
public:
SimpleDll();
~SimpleDll();
float Add(float a,float b);
float Minus(float a,float b);
private:
SimpleTwo m_cSimpleTest;
};
#define DLL_IMPLEMENT
#include "pch.h"
#include "LibToolDll.h"
SimpleDll::SimpleDll()
{
}
SimpleDll::~SimpleDll()
{
}
float SimpleDll::Add(float a, float b)
{
return a+b;
}
float SimpleDll::Minus(float a, float b)
{
return m_cSimpleTest.Minus(a,b);
}
类库自己的类
#pragma once
class SimpleTwo
{
public:
SimpleTwo();
~SimpleTwo();
float Minus(float a,float b);
};
#include "pch.h"
#include "SimpleTwo.h"
SimpleTwo::SimpleTwo()
{
}
SimpleTwo::~SimpleTwo()
{
}
float SimpleTwo::Minus(float a, float b)
{
return a-b;
}
注意:这样我们只能在外部调用SimpleDll,而不能调用SimpleTwo,如果外部直接调用SimpleTwo,会显示无法解析外部符号,因为我们没有将他设置为外部调用类(dllexport)。
DLL生成和外部项目引用
1.生成动态库
右键项目生成
2.外部QT项目引用
右键引用->添加引用->项目。
3.添加引用路径
四、外部项目测试
运行效果L:
附带Qt绘制图像保存例子: