2019独角兽企业重金招聘Python工程师标准>>>

关于

DesignNet插件是Totem插件之一,主要用于辅助开发数字图像处理、机器学习、模式识别相关算法。具有快速验证、模块化插件化开发的优点。类似软件包括:Mindjet(思维导图),ImageNet, voreenve等。 效果图如下:

准备

  1. Qt 4.8.4
  2. OpenCV2.4.4
    设置环境变量OPEN_CV,值为opencv build路径如:F:\SDKs\opencv2.4.4\opencv\build\install
  3. Visual Studio 2010 professional

<!-- lang: shell -->
git clone https://github.com/MichaelMiao/Totem.git
切换到DesignNet1分支,如下图所示

目录结构

Root //!< 根目录 |—src //!< 存放所有的源代码 |—app //!< 主应用程序,由该应用程序启动,并加载插件 |—libs //!< 所有的库文件 |—Aggregation //!< 集合工具库(类似于C/C++中的Union) |—algrithom //!< 通用算法 |—CustomUI //!< UI相关类(包含一些自定义控件) |—extensionsystem //!< 插件管理器、对象池等 |—GraphicsUI //!< 使用Qt GraphicsView framework 的控件相关类 |—Utils //!< 工具辅助类 |—plugins //!< 所有的插件 |—coreplugin //!< 核心插件 |—designnetplugin //!< DesignNet相关插件 |--designnet_core //!< DesignNet核心插件 |—tools //!< DesignNet子插件 |—welcome //!< 欢迎界面 |—shared //!< 不同项目之间共享的类 |—test //!< 用于测试部分库中的类的功能 |—Win32 //!< binary file 和部分资源文件 |—Debug //!< 可执行文件所在路径 |—libs //!< 库文件生成路径 |—medias //!< 资源路径 |—plugins //!< 插件路径 |—skins //!< 皮肤文件 |—CHANGELOG //!< 变化记录 |—README.md //!< License |—Totem.sln //!< 项目解决方案

DesignNet相关插件的开发都是在src->plugins->designnetplugin->tools 下进行开发。

DesignNet的结构组成

miao|—>testblock|—>Normal|—>test

DesignNet的每一个文档都是由一个DesignNetSpace来对应的,每一个DesignNetSpace又是有多个处理器Processor组成,Processor又由端口(Port)和属性Property组成。

具体开发方法

一般开发是在原解决方案中的tool中添加Qt Library工程就可以了,(当然,可以在自己定义的任意路径下开发,设置相关路径,然后将生成的插件拷贝到Win32->plugins下就可以了)。这里以在原解决方案中添加工程。

1. 添加TestPlugin工程到Tools文件夹(需要安装Qt4Add-In,就会有该向导)。

2. 修改项目属性,并添加XML支持。

如图所示修改相关设置:

添加Include路径,包括:$(SolutionDir)src\shared;$(SolutionDir)src\libs,$(SolutionDir)src\plugins\designnetplugin\designnet_core

copy  "$(ProjectName).pluginspec" "$(SolutionDir)$(Platform)\plugins\"
copy  "$(Configuration)\$(TargetName).dll" "$(SolutionDir)$(Platform)\plugins\"
copy  "$(Configuration)\$(TargetName).lib" "$(SolutionDir)$(Platform)\libs\"

修改Linker->OutputFile为$(Configuration)\$(TargetName).dll。
添加$(SolutionDir)$(Platform)\libs到Linker->Additional Library Directories。
在Build Events选项卡中Command Line 添加如下三项:

可根据其他已有的工程里设置工程的Properties。

3. 修改代码

修改TestPlugin继承关系,并实现

virtual bool initialize(const QStringList &arguments, QString *errorString);
virtual void extensionsInitialized();

在TestPlugin.cpp中添加导出宏:Q_EXPORT_PLUGIN2(TestPlugin, TestPlugin)(当然,要包含相应头文件)

4. 拷贝其他Tool中的*.pluginspec到TestPlugin工程的目录下。可以修改*.pluginspec下的相关信息。

5. 编译即可生成可以被Totem插件识别的插件了。

6. 添加处理器类Test,并继承自DesignNet::ProcessorGraphicsBlock。代码如下:

#include <QObject>
#include "designnetplugin/designnet_core/graphicsitem/processorgraphicsblock.h"
#include "designnetplugin/designnet_core/designnetbase/port.h"
#include "designnetplugin/designnet_core/data/imagedata.h"class Test : public DesignNet::ProcessorGraphicsBlock
{Q_OBJECTpublic:Test(DesignNet::DesignNetSpace *space, QGraphicsItem *parent = 0);~Test();virtual Processor* create(DesignNet::DesignNetSpace *space = 0) const;virtual QString title() const;virtual QString category() const;//!< 种类virtual bool process();     //!< 处理函数
protected:virtual void dataArrived(DesignNet::Port* port);  //!< 数据到达virtual void propertyChanged(DesignNet::Property *prop);virtual bool connectionTest(DesignNet::Port* src, DesignNet::Port* target);DesignNet::Port m_inputPort;
};

设置Block图标

在Test构造函数中添加setIcon()即可。

添加属性

一个处理器的属性将会在属性列表中显示出来。在Test构造函数中,首先构造自己需要的属性如:PathDialogProperty prop(路径选择属性), 添加addProperty(prop)就可以了。

添加端口

如下代码展示的是构造一个拥有Image类型数据的端口,该Image类型是RGB类型的数据, 端口为输出类型端口。

m_outPort(new ImageData(ImageData::IMAGE_BGR, this), Port::OUT_PORT)调用addPort(&m_outPort)就可以啦。

设置处理器种类

处理器种类是根据字符串中的’/’符号进行解析的,也就是,在处理器列表中将会根据’/’来建立分类层次。如在category()中返回”miao/testblock/Normal”,将会把该处理器放在如下结构中,叶子节点就是处理器:

miao|—>testblock|—>Normal|—>test启动处理器,开始执行

在数据准备好时,也就是在dataArrived()调用了指定次数,指定端口数据都到已经达时,可以调用setDataReady(true);系统将会自动开辟一个线程去执行process()函数。

属性修改事件

当用户在UI上修改某一项属性时,将会调用到函数propertyChanged()当中。

先写这么多,以后还要在修改很多东西呢。

转载于:https://my.oschina.net/MichaelBJFU/blog/132712

Totem-DesignNet处理器插件开发方法相关推荐

  1. android phonegap插件开发方法 plugin

    2019独角兽企业重金招聘Python工程师标准>>> android phonegap插件开发方法 plugin 分类: phonegap 2014-03-03 22:41  59 ...

  2. idea提示未配置 Spring Boot 配置注解处理器解决方法

    未配置 Spring Boot 配置注解处理器 解决方法: 在pom.xml里添加依赖 <dependency><groupId>org.springframework.boo ...

  3. 嵌入式ARM多核处理器并行化方法

    from:http://ee.ofweek.com/2014-11/ART-11001-2808-28902672.html 目前,嵌入式多核处理器已经在嵌入式设备领域得到广泛运用,但嵌人式系统软件开 ...

  4. 【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )

    文章目录 一.报错信息 二.问题分析 三.解决方案 注解处理器 AbstractProcessor 中的 process 方法可能会调用多次 , 在生成代码时 , 一定要注意 , 检测到 注解节点 后 ...

  5. 主板和cpu搭配表_主板和CPU如何搭配?主板和处理器搭配方法

    小白系统 免费的人工客服 点击联系 相信有很多小伙伴都有自己DIY电脑的时候,对于萌新来说,主板和CPU常常弄混,不知道该如何进行搭配,因为不同的主板和CPU是无法搭配的.比如Intel和AMD的CP ...

  6. 如何给笔记本降温?笔记本处理器降温方法

    笔记本电脑是办公学习中必备的工具之一,但是在使用过程中会发现温度过高的情况,经常会达到70度.80度甚至90度的高温,那要怎么给笔记本电脑降温呢?下面就来看看几个小办法. 方法一.关闭无用的后台程序 ...

  7. 计算机开启多核方法,win10系统开启多核处理器的方法

    win10系统使用久了,好多网友反馈说关于对win10系统开启多核处理器设置的方法,在使用win10系统的过程中经常不知道如何去对win10系统开启多核处理器进行设置,有什么好的办法去设置win10系 ...

  8. 计算机里面如何更改处理器,电脑处理器如何更换 电脑处理器更换方法介绍【详解】...

    电脑的中央处理器是处理器,它是 电脑 数据处理与程序运行的核心部件,是电脑重要的组成部分.我们都知道电脑属于高新设备,更新换代节奏快,尤其是内部主要零件例如处理器.如果我们掌握的如何更换处理器的技能, ...

  9. java 多个异常处理_Java 多个异常共享同一个异常处理器的方法

    传统的异常处理 我们先来看下,传统的异常处理方式: // not share exception handler int[] intArray = new int[3]; try { for (int ...

最新文章

  1. HTML 基础知识回顾
  2. 得到win7 win8的桌面句柄
  3. sqlserver2000 php5.4,PHP添加Mssql/sqlserver2000扩展,适用于Php5.2/Php5.3/Php5.4
  4. 详解centos7使用无线wifi连接的方法
  5. python代码模块与模块之间空1行_Day006|Python语法基础
  6. win10下VS2013+OpenCV2.4.9环境配置
  7. 最便宜的骁龙888旗舰机!realme真我GT正式发布:2799元起售
  8. python代码注释规范-Python编程规范之注释
  9. 24. Element namespaceURI 属性
  10. parquet格式_数据工程101:揭开Hadoop数据格式的神秘面纱:Avro,ORC和Parquet
  11. java删除未引用的库_利用Proguard移除无用代码以及碰到的坑
  12. python实现无刻度3升水和5升水准确得到4升水的代码步骤
  13. 上标和下标复制大全(含0~9、字母、特殊字符)
  14. 心田花开:解锁各类语文阅读理解答题技巧
  15. AI绘画正在取代设计师?答案是这样的
  16. 基于Web+App的快递公司物流管理信息系统设计与实现
  17. 和平精英分数计算机制,和平精英加分机制怎么算 加分玩法详解
  18. 史上最全整理:大投机家 杰西·利弗莫尔 投资原则及启示(期货股票交易者必收藏)
  19. Flutter高仿微信-第36篇-单聊-语音通话
  20. matlab 五数总括,Matlab 数据类型  五、表

热门文章

  1. 探讨:COCO2017数据集中包含很多目标被标注为一个框bbox,是标注错误吗?
  2. 一个在分割、检测与定位、高分辨率通用的网络
  3. mysql三范式和反三范式_数据库三范式和反三范式
  4. Codeforces 524F And Yet Another Bracket Sequence 哈希
  5. python ---Pandas时间序列:生成指定范围的日期
  6. python的__init__几种方法总结【转载】
  7. 基于Windows下使用Docker 部署Redis
  8. 刚才遇到了关于C#使用外部DLL函数上的char*的问题。
  9. 看懂OpenCV中IplImage转换成CvMat的语句:CvMat sstub, *src = cvGetMat(srcarr, sstub);
  10. MATLAB的基础-虽然基础,但全是细节,掌握了这些细节,才是MATLAB高手