MIP框架自从更新以来,受到视觉社区广泛的关注,谢谢大家。在社区里面引起很大的争议和可行性的质疑。首先谢谢大家的关注,本次框架设计是根据自己近十年在视觉软件开发市场遇到的问题,改善而来。博主认为本次,是彻底解决了组件开发解耦问题,并以MIP框架为契机,推动工业组件化和标准化进程。下面介绍通用组件开发,并完成和界面和业务逻辑的解耦。
本次框架是基于QT,同时充分使用QT开发组态框架。QT标准的普及性很高,开源,跨平台的优势,成为很多团队的开发底层框架。但是基本每个团队都遇到了,模块化解耦的问题。MIP框架采用QT注册制反射机制的原理,对模块和平台,以及界面的完全解耦化。具体的解释连接:https://blog.youkuaiyun.com/qq_17767255/article/details/134530068?spm=1001.2014.3001.5502
对于组件开发者本次框架设计只定义了一个接口
extern "C" __declspec(dllexport) QObject * clear();
实现这个接口,外部框架可以采用显示连接的方式调用clear(),获取实现的对象。
实现的方法只要New一个自己实现的对象
QObject* clear()
{
return new ImageThresholds();
}
同样对象可以继承QMainWindow,QWidget等QObject子对象进行实现。
开发QT界面教程查看链接:https://www.cnblogs.com/liweikuan/p/14317083.html
在编译的时候,可以直接生成DLL文件。在VS2019配置的QT工程直接将生成EXE改成DLL
编译生成的DLL文件就是一个组件。
上面就是一个简单组件的开发过程,把DLL放置到MIP软件运行目录LoadDll文件下就可以进行加载操作。
数据的交互采用QT的信号和槽函数,也就是MIP界面出现的引脚标记函数,组件上面识别的是控件所有自定义的槽函数,下面识别的是所有自定义的信号函数。
组件之间的通讯是根据信号和槽函数进行连接,没有任何自定义的接口。采用拖拽连线的方式会认操作更加简单。
这就是MIP解耦核心原理。因为QT做了大部分工作,所以这次MIP一个核心任务就是推动这种标准的解耦形式。实现不同团队组件之间的协作。完成项目的高效开发。
实现的一个具体例子QtWidgetApplication2.h文件
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication2.h"
extern "C" __declspec(dllexport) QObject * clear();
class QtWidgetsApplication2 : public QMainWindow
{
Q_OBJECT
public:
QtWidgetsApplication2(QWidget *parent = Q_NULLPTR);
private:
Ui::QtWidgetsApplication2Class ui;
};
实现的一个具体例子QtWidgetApplication2.cpp文件
#include "QtWidgetsApplication2.h"
QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
}
QObject* clear()
{
return new QtWidgetsApplication2();
}
这就是实现一个简单组件的过程。
想更深入的连接可以参照:https://gitee.com/DeepModel/mip
工程下的ImageThresholds项目。
最后谢谢大家的关注,本项目结构版本已经完成,后期会进行不断的重构和优化,但是这种组件接口和形式不会变。
目前社区开发人员已经有15人,接3个团队正式介入到平台的开发和推广工作。想加入和接洽的可以私信我。