当前位置: 首页 > news >正文

衡水提供网站设计公司哪家专业广东建设资格注册中心网站

衡水提供网站设计公司哪家专业,广东建设资格注册中心网站,嘉兴港区建设局网站,制作网页动画的软件在之前的文章中,有介绍通过QProcess的方式启动QWidget应用,然后将其窗口嵌入到其他的qt应用中,作为子窗口使用.这篇文章主要介绍qt插件的方式将QWidget应用的窗口封装为插件,然后作为其他Qt应用中的子窗口使用. 插件优点: 与主程序为同一个进程,免去了进程间繁琐的通信方式,…在之前的文章中,有介绍通过QProcess的方式启动QWidget应用,然后将其窗口嵌入到其他的qt应用中,作为子窗口使用.这篇文章主要介绍qt插件的方式将QWidget应用的窗口封装为插件,然后作为其他Qt应用中的子窗口使用.  插件优点: 与主程序为同一个进程,免去了进程间繁琐的通信方式,在不同进程间通信时,需要有一套协议来保证数据的及时性及稳定性.比较繁琐,而插件的方式,通过插件接口文件来进行通信,在接口文件中定义API, 接口文件(定义为纯虚类)(主程序通过接口文件来访问该插件,插件通过继承该接口,重写所有纯虚函数) #pragma once#include QtPluginQT_BEGIN_NAMESPACE class QString; class QWidget; QT_END_NAMESPACE//定义视觉检测接口 class InterfaceVisionMeasure { public:virtual ~InterfaceVisionMeasure() default;/// summary/// 创建视觉窗口对象指针/// /summary/// param nameiLanguage0为英文,1为中文/param/// param nameparent父对象/param/// returns窗口指针/returnsvirtual void* CreatWindow(int iLanguage, QWidget* parent nullptr) 0;/// summary/// 获取对应序号轴编码器坐标/// /summary/// param nameGetAxisEncVal回调对象/paramvirtual void RegisterGetAxisEncVal(const std::functionvoid(int, double) GetAxisEncVal) 0;/// summary/// 获取对应序号轴规划位置坐标/// /summary/// param nameGetAxisPrfVal回调对象/paramvirtual void RegisterGetAxisPrfVal(const std::functionvoid(int, double) GetAxisPrfVal) 0;/// summary/// 获取内部变量的值/// /summary/// param nameGetVariableInVal回调对象/paramvirtual void RegisterGetVariableInVal(const std::functionvoid(int, double) GetVariableInVal) 0;/// summary/// 设置内部变量的值/// /summary/// param nameSetVariableInVal回调对象/paramvirtual void RegisterSetVariableInVal(const std::functionvoid(int, const double) SetVariableInVal) 0;/// summary/// 设置当前测量文件路径(测量文件)/// /summary/// param namedir测量文件路径/paramvirtual void SetCurrentMeaureFile(const QString dir) 0;/// summary/// 开启测量/// /summary/// param nameindexMain工序号/param/// param nameIndexSub工序号中的子序号/paramvirtual void StartMeasureProcess(int indexMain, int IndexSub) 0;/// summary/// 测量结果返回到主程序/// /summary/// param nameMeasureResult回调对象/paramvirtual void RegisterMeasureResult(const std::functionvoid(const int, const QStringList, const QVectordouble) MeasureResult) 0;/// summary/// 创建测量文件(编辑文件)/// /summary/// param namedir创建路径/param/// returns0为正常,非0为失败/returnsvirtual int NewMeasureFile(const QString dir)0;/// summary/// 打开测量文件(编辑文件)/// /summary/// param namedir打开路径/param/// returns0为正常,非0为失败/returnsvirtual int OpenMeasureFile(const QString dir) 0;/// summary/// 另存为测量文件(编辑文件)/// /summary/// param namesrcDir源文件路径/param/// param namedesDir目标文件路径/param/// returns0为正常,非0为失败/returnsvirtual int SaveAsMeasureFile(const QString srcDir, const QString desDir) 0;/// summary/// 设置当前显示页/// /summary/// param nameindexMain对应工序页, -10为找中心,-11为对焦/param/// param nameindexSub对应工序页中的第几页/param/// returns0为成功, /returnsvirtual int SetShowMeasurePage(int indexMain, int indexSub)0;/// summary/// 获取当前测量工程工序列表(测量文件)/// /summary/// param namelistType工序列表/param/// returns0为成功/returnsvirtual int GetCurMeasureProgram(QVectorint listType)0; };QT_BEGIN_NAMESPACE #define Interface_VisionMeasure_IID Demina.Nc.VisionMeasureInterface/1.0 Q_DECLARE_INTERFACE(InterfaceVisionMeasure, Interface_VisionMeasure_IID) QT_END_NAMESPACE 重写接口类:   h文件 #pragma once#include QObject #include InterfacesVisionMeasure.hclass qcDllVisionMeasure : public QObject, public InterfaceVisionMeasure {Q_OBJECTQ_INTERFACES(InterfaceVisionMeasure)Q_PLUGIN_METADATA(IID Interface_VisionMeasure_IID FILE DllVisionMeasure.json) public:qcDllVisionMeasure(QObject* parent nullptr);~qcDllVisionMeasure() override;/// summary/// 创建视觉窗口对象指针/// /summary/// param nameparent父对象/param/// returns窗口指针/returnsvoid* CreatWindow(int iLanguage, QWidget* parent nullptr) override;/// summary/// 获取对应序号轴编码器坐标/// /summary/// param nameGetAxisEncVal回调对象/paramvoid RegisterGetAxisEncVal(const std::functionvoid(int, double) GetAxisEncVal) override;/// summary/// 获取对应序号轴规划位置坐标/// /summary/// param nameGetAxisPrfVal回调对象/paramvoid RegisterGetAxisPrfVal(const std::functionvoid(int, double) GetAxisPrfVal) override;/// summary/// 获取内部变量的值/// /summary/// param nameGetVariableInVal回调对象/paramvoid RegisterGetVariableInVal(const std::functionvoid(int, double) GetVariableInVal) override;//设置内部变量的值void RegisterSetVariableInVal(const std::functionvoid(int, const double) SetVariableInVal) override;/// summary/// 设置当前测量文件路径/// /summary/// param namedir测量文件路径/paramvoid SetCurrentMeaureFile(const QString dir) override;/// summary/// 开启测量/// /summary/// param nameindexMain工序号/param/// param nameIndexSub工序号中的子序号/paramvoid StartMeasureProcess(int indexMain, int IndexSub) override;/// summary/// 测量结果返回到主程序/// /summary/// param nameMeasureResult回调对象/paramvoid RegisterMeasureResult(const std::functionvoid(const int, const QStringList, const QVectordouble) MeasureResult) override;/// summary /// 创建测量文件 /// /summary /// param namedir创建路径/param /// returns0为正常,非0为失败/returnsint NewMeasureFile(const QString dir) override;/// summary/// 打开测量文件/// /summary/// param namedir打开路径/param/// returns0为正常,非0为失败/returnsint OpenMeasureFile(const QString dir) override;/// summary/// 另存为测量文件/// /summary/// param namesrcDir源文件路径/param/// param namedesDir目标文件路径/param/// returns0为正常,非0为失败/returnsint SaveAsMeasureFile(const QString srcDir, const QString desDir) override;/// summary/// 设置当前显示页/// /summary/// param nameindexMain对应工序页, -10为找中心,-11为对焦/param/// param nameindexSub对应工序页中的第几页/param/// returns0为成功, /returnsint SetShowMeasurePage(int indexMain, int indexSub) override;/// summary/// 获取当前测量工程工序列表/// /summary/// param namelistType工序列表/param/// returns0为成功/returnsint GetCurMeasureProgram(QVectorint listType) override; private://视觉界面对象指针void* m_pMainWnd{}; };在实现cpp中,封装QWidget窗口,创建其实例 #include stdafx.h #include qcDllVisionMeasure.h #include qwaMeasureToolsVM.hqcDllVisionMeasure::qcDllVisionMeasure(QObject *parent) :QObject(parent) {}qcDllVisionMeasure::~qcDllVisionMeasure() {}void* qcDllVisionMeasure::CreatWindow(int iLanguage, QWidget* parent) {qwaMeasureToolsVM* widget new qwaMeasureToolsVM(iLanguage,true,parent);m_pMainWnd (void*) widget;return m_pMainWnd; }//采用回调的方式实现,插件通过回调函数来获取,设置参数 //获取对应序号轴编码器坐标 void qcDllVisionMeasure::RegisterGetAxisEncVal(const std::functionvoid(int, double) GetAxisEncVal) {if (m_pMainWnd){((qwaMeasureToolsVM*)m_pMainWnd)-RegisterGetAxisEncVal(GetAxisEncVal);} }//获取对应序号轴规划位置坐标 void qcDllVisionMeasure::RegisterGetAxisPrfVal(const std::functionvoid(int, double) GetAxisPrfVal) {}//获取内部变量的值 void qcDllVisionMeasure::RegisterGetVariableInVal(const std::functionvoid(int, double) GetVariableInVal) {if (m_pMainWnd){((qwaMeasureToolsVM*)m_pMainWnd)-RegisterGetVariableInVal(GetVariableInVal);} }//设置内部变量的值 void qcDllVisionMeasure::RegisterSetVariableInVal(const std::functionvoid(int, const double) SetVariableInVal) {if (m_pMainWnd){((qwaMeasureToolsVM*)m_pMainWnd)-RegisterSetVariableInVal(SetVariableInVal);} }/// summary/// 设置当前测量文件路径/// /summary/// param namedir测量文件路径/param void qcDllVisionMeasure::SetCurrentMeaureFile(const QString dir) {if (m_pMainWnd){((qwaMeasureToolsVM*)m_pMainWnd)-SetCurrentMeaureFileByMainApp(dir);} }/// summary /// 开启测量 /// /summary /// param nameindexMain工序号/param /// param nameIndexSub工序号中的子序号/param void qcDllVisionMeasure::StartMeasureProcess(int indexMain, int IndexSub) {if (m_pMainWnd){((qwaMeasureToolsVM*)m_pMainWnd)-StartMeasureProcessByMainApp(indexMain, IndexSub);} }/// summary /// 测量结果返回到主程序 /// /summary /// param nameMeasureResult回调对象/param void qcDllVisionMeasure::RegisterMeasureResult(const std::functionvoid(const int, const QStringList, const QVectordouble) MeasureResult) {if (m_pMainWnd){((qwaMeasureToolsVM*)m_pMainWnd)-RegisterMeasureResult(MeasureResult);} }/// summary /// 创建测量文件 /// /summary /// param namedir创建路径/param /// returns0为正常,非0为失败/returns int qcDllVisionMeasure::NewMeasureFile(const QString dir) {if (m_pMainWnd){return ((qwaMeasureToolsVM*)m_pMainWnd)-NewMeasureFile(dir);}return -1; }/// summary /// 打开测量文件 /// /summary /// param namedir打开路径/param /// returns0为正常,非0为失败/returns int qcDllVisionMeasure::OpenMeasureFile(const QString dir) {if (m_pMainWnd){return ((qwaMeasureToolsVM*)m_pMainWnd)-OpenMeasureFile(dir);}return -1; }/// summary /// 另存为测量文件 /// /summary /// param namesrcDir源文件路径/param /// param namedesDir目标文件路径/param /// returns0为正常,非0为失败/returns int qcDllVisionMeasure::SaveAsMeasureFile(const QString srcDir, const QString desDir) { if (m_pMainWnd){return ((qwaMeasureToolsVM*)m_pMainWnd)-SaveAsMeasureFile(srcDir, desDir);}return -1; }/// summary /// 设置当前显示页 /// /summary /// param nameindexMain对应工序页, -10为找中心,-11为对焦/param /// param nameindexSub对应工序页中的第几页/param /// returns0为成功, /returns int qcDllVisionMeasure::SetShowMeasurePage(int indexMain, int indexSub) { if (m_pMainWnd){return ((qwaMeasureToolsVM*)m_pMainWnd)-SetShowMeasurePage(indexMain, indexSub);}return -1; }/// summary /// 获取当前测量工程工序列表 /// /summary /// param namelistType工序列表/param /// returns0为成功/returns int qcDllVisionMeasure::GetCurMeasureProgram(QVectorint listType) { if (m_pMainWnd){return ((qwaMeasureToolsVM*)m_pMainWnd)-GetCurMeasureProgram(listType);}return -1; } json接口描述json文件,放在头文件同目录 {Type: [BT150D],Name: VisionMeasure,Description: this is vision measure tools.,Version: 1.0.0,Vendor: demina } 设置工程生成为从exe改为dll 将qt插件功能启动 至此重新封装QWdiget结束, 等待生成的dll,将其复制到主程序的exe文件路径下即可. 在主程序中要做的工作,即通过接口文件 声明一个接口实例指针. bool NcCoreQt::InitPluginVisionMeasure() {QString dir qApp-applicationDirPath();dir /VisionMeasure.dll;//视觉插件的dllm_pPluginLoaderVM new QPluginLoader(dir, this);QObject* plugin m_pPluginLoaderVM-instance();//qDebug() pluginLoader.metaData();if (plugin) {m_pInterfaceVM qobject_castInterfaceVisionMeasure*(plugin);if (m_pInterfaceVM){ qInfo() tr(Load vision measure interface successful);return true;}}else{qDebug() m_pPluginLoaderVM-errorString();}return false; }
http://www.ho-use.cn/article/10821786.html

相关文章:

  • 招代理的网站要怎么做微网站 方案
  • 河南省教育厅官方网站师德建设线上商城怎么推广
  • 容易收录的网站仿淘宝网站模板
  • 免费营销软件网站建设做网站用什么数据库好用
  • 如东做网站的公司深圳网站建设推广
  • 江海区建设局网站网站免费制作教程
  • 广东茶叶网站建设优化师培训机构
  • 做护肤品好的网站百度投流运营
  • 公司微信网站开发平台自己做网站免费
  • 怎么在自己的网站上做漂浮链接在线制作图片的免费软件
  • 婴儿睡袋网站建设建设网校
  • nginx缓存wordpressseo云优化外包
  • 做二手货车都做什么网站建设新闻博客类网站要多大空间
  • 凯里网站建设如何收费建设工程质量+协会网站
  • 做网站时怎么让边框细一点视频制作和剪辑
  • idc网站建设做美直播网站
  • 沈阳网站开发技术公司猎头公司的工作模式不包括
  • 免费的网站或软件网站开发给网站设置图标在什么文件中写代码
  • 上海高端网站建设定制wordpress插件微信营销
  • 网站加seo需要多少钱兴平市住房和城乡建设局门户网站
  • 查找网站后台入口网站中数据查询如何做
  • 肇庆企业网站建设建设ipv6网站
  • 海淘网站开发个人网站建站指南
  • 网站设计北京新设计外贸英文网站
  • 有哪些网站可以做全屏代码网站按照规模分为哪几类
  • 安徽省建设工程资料上传网站sem培训机构
  • 招聘网站做精准 置顶网站免费空间
  • 福安做网站最好广州十大家装品牌
  • 商城类网站和o2o网站广告牌
  • 炫酷的网站设计wordpress读取文章样式