qt-PLC可视化编辑器

qt-PLC可视化编辑器

  • 一、演示效果
  • 二、核心代码
  • 三、下载链接


一、演示效果

在这里插入图片描述

二、核心代码


#include "diagramitem.h"
#include "arrow.h"#include <QDebug>
#include <QGraphicsScene>
#include <QGraphicsSceneContextMenuEvent>
#include <QMenu>
#include <QPainter>//! [0]
DiagramItem::DiagramItem(DiagramType diagramType, QMenu *contextMenu,QGraphicsItem *parent,MODE opMode): QGraphicsPathItem(parent)
{myDiagramType = diagramType;myContextMenu = contextMenu;normallyOpen=true;operationMode=opMode;QPainterPath path;QFont diagram_font("Ubuntu Mono Bold",12);int x=-30,y=0,w=70,h=70;no_contact.addText(x,y,diagram_font,"—| |—");no_contact.addRect(-35,-35,70,70);nc_contact.addText(x,y,diagram_font,"—|/|—");nc_contact.addRect(-35,-35,70,70);no_coil.addText(x,y,diagram_font,"—( )—");no_coil.addRect(-35,-35,70,70);nc_coil.addText(x,y,diagram_font,"—(/)—");nc_coil.addRect(-35,-35,70,70);switch (myDiagramType) {case DigitalIn0:path=no_contact;title="DIN[0]";break;case DigitalIn1:path=no_contact;title="DIN[1]";break;case DigitalIn2:path=no_contact;title="DIN[2]";break;case DigitalIn3:path=no_contact;title="DIN[3]";break;case DigitalIn4:path=no_contact;myPath=path;title="DIN[4]";break;case DigitalIn5:path=no_contact;title="DIN[5]";break;case DigitalIn6:path=no_contact;title="DIN[6]";break;case DigitalIn7:path=nc_contact;title="DIN[7]";break;case TIM1:path=no_contact;title="TIM1";break;case CNT1:path=no_contact;title="CNT1";break;case CNT2:path=no_contact;title="CNT2";break;case AUX0:path=no_coil;title="AUX[0]";break;case AUX1:path=no_coil;title="AUX[1]";break;case AUX2:path=no_coil;title="AUX[2]";break;case AUX3:path=no_coil;title="AUX[3]";break;case AUX4:path=no_coil;title="AUX[4]";break;case AUX5:path=nc_coil;title="AUX[5]";break;case AUX6:path=no_coil;title="AUX[6]";break;case AUX7:path=no_coil;title="AUX[7]";break;case DigitalOut0:path=no_coil;title="DOUT[0]";break;case DigitalOut1:path=no_coil;title="DOUT[1]";break;case DigitalOut2:path=no_coil;title="DOUT[2]";break;case DigitalOut3:path=no_coil;title="DOUT[3]";break;case DigitalOut4:path=no_coil;title="DOUT[4]";break;case DigitalOut5:path=no_coil;title="DOUT[5]";break;case DigitalOut6:path=no_coil;title="DOUT[6]";break;case DigitalOut7:path=no_coil;title="DOUT[7]";break;case TIM1EN:path=no_coil;title="TIM1EN";break;case TIM1STOP:path=no_coil;title="TIM1STOP";break;case CNT1SET:path=no_coil;title="CNT1SET";break;case CNT2SET:path=no_coil;title="CNT2SET";break;case CNT1RESET:path=no_coil;title="CNT1RST";break;case CNT2RESET:path=no_coil;title="CNT2RST";break;}path.addText(QPointF(-32,30),QFont(),title);myPath=QPainterPath(path);myPolygon=QPolygonF(QRectF(-35,-35,70,70));setPen(QPen(Qt::black, 2));setPath(path);setFlag(QGraphicsItem::ItemIsMovable, true);setFlag(QGraphicsItem::ItemIsSelectable, true);setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
}DiagramItem::DiagramItem(const DiagramItem &diagramItem)
{myDiagramType=diagramItem.diagramType();operationMode=diagramItem.opMode();title=diagramItem.title;arrows=diagramItem.arrows;arrows_in=diagramItem.arrows_in;arrows_out=diagramItem.arrows_out;}
//! [0]//! [1]
void DiagramItem::removeArrow(Arrow *arrow)
{int index = arrows.indexOf(arrow);if (index != -1)arrows.removeAt(index);
}
//! [1]//! [2]
void DiagramItem::removeArrows()
{foreach (Arrow *arrow, arrows) {arrow->startItem()->removeArrow(arrow);arrow->endItem()->removeArrow(arrow);scene()->removeItem(arrow);delete arrow;}
}
//! [2]//! [3]
void DiagramItem::addArrow(Arrow *arrow)
{arrows.append(arrow);
}
//! [3]//! [4]
QPixmap DiagramItem::image() const
{QPixmap pixmap(70, 70);pixmap.fill(Qt::white);QPainter painter(&pixmap);painter.setPen(QPen(Qt::black, 2));painter.translate(35, 35);painter.drawPath(myPath);return pixmap;
}
//! [4]//! [5]
void DiagramItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{scene()->clearSelection();setSelected(true);myContextMenu->exec(event->screenPos());
}
//! [5]//! [6]
QVariant DiagramItem::itemChange(GraphicsItemChange change, const QVariant &value)
{if (change == QGraphicsItem::ItemPositionChange) {foreach (Arrow *arrow, arrows) {arrow->updatePosition();}}return value;
}
//! [6]
void DiagramItem::makeInput(){if(normallyOpen){myPath=no_contact;}else{myPath=nc_contact;}myPath.addText(QPointF(-32,30),QFont(),title);setPath(myPath);}void DiagramItem::makeOutput(){if(normallyOpen){myPath=no_coil;}else{myPath=nc_coil;}myPath.addText(QPointF(-32,30),QFont(),title);setPath(myPath);
}bool DiagramItem::operator==(DiagramItem &item)
{return myDiagramType==item.diagramType();}QString DiagramItem::operator<<(DiagramItem &item)
{return item.title;
}

三、下载链接

https://download.csdn.net/download/u013083044/89658333

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408692.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[000-01-018].第3节:Linux环境下ElasticSearch环境搭建

我的后端学习笔记大纲 我的ElasticSearch学习大纲 1.Linux系统搭建ES环境&#xff1a; 1.1.单机版&#xff1a; a.安装ES-7.8版本 1.下载ES: 2.上传与解压&#xff1a;将下载的tar包上传到服务器software目录下&#xff0c;然后解压缩&#xff1a;tar -zxvf elasticsearch-7…

人工智能算法工程师(中级)课程21-深度学习中各种优化器算法的应用与实践、代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程21-深度学习中各种优化器算法的应用与实践、代码详解。本文将介绍PyTorch框架下的几种优化器&#xff0c;展示如何使用PyTorch中的优化器&#xff0c;我们将使用MNIST数据集和一个简单…

增材制造(3D打印):为何备受制造业瞩目?

在科技浪潮的推动下&#xff0c;增材制造——即3D打印技术&#xff0c;正逐步成为制造业领域的璀璨新星&#xff0c;吸引了航空航天、汽车、家电、电子等众多行业的目光。那么&#xff0c;是什么让3D打印技术如此引人注目并广泛应用于制造领域&#xff1f;其背后的核心优势又是…

Unity-可分组折叠的Editor

Unity-可分组折叠的Editor &#x1f957;功能介绍&#x1f36d;用法 &#x1f957;功能介绍 在序列化的字段上标记特性:[FoldoutGroup(“xxx”)]&#xff0c;inspector上就会被分组折叠显示。 &#xff08;没有被指定的字段自动放到Default组中&#xff09; 传送门&#x1f30…

【Python】1.基础语法(1)

文章目录 1.变量的语法1.1定义变量1.1.1硬性规则(务必遵守)1.1.2软性规则&#xff08;建议遵守&#xff09; 1.2使用变量 2.变量的类型2.1整型2.2浮点型2.3 字符串类型2.4布尔类型2.5其他类型2.6 动态类型特性 3.注释3.1 注释行3.2 文档字符串 3.3 如何批量注释3.4注释的规范 4…

深信服上半年亏损5.92亿,营收同比降低2.3亿

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

如何使用ssm实现网络安全宣传网站设计

TOC ssm177网络安全宣传网站设计jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管…

【SQL】指定日期的产品价格

目录 题目 分析 代码 题目 产品数据表: Products ------------------------ | Column Name | Type | ------------------------ | product_id | int | | new_price | int | | change_date | date | ------------------------ (product_id, chang…

九、前端中的异步方法Promise,Promise详解

文章目录 1.Promise简介什么是promise为什么使用Promisepromise中的状态 2.Promis的用法 1.Promise简介 什么是promise Promise是异步编程的一种解决方案&#xff0c;它的构造函数是同步执行的&#xff0c;then 方法是异步执行的。 为什么使用Promise 在JavaScript的世界中…

Java 入门指南:List 接口

Collection 接口提供了一系列用于操作和管理集合的方法&#xff0c;包括添加、删除、查询、遍历等。它是所有集合类的根接口&#xff0c;包括 List、Set、Queue 等。 Collection 接口常见方法 add(E element)&#xff1a;向集合中添加元素。 addAll(Collection col)&#xff1…

洛谷 P2569 [SCOI2010] 股票交易

题目来源于&#xff1a;洛谷 题目本质&#xff1a;动态规划&#xff0c;单调队列 解题思路&#xff1a; 方程f[i][j]表示第 i 天结束后&#xff0c;手里剩下 j 股的最大利润&#xff0c;则不买不卖&#xff1a;f[i][j]f[i-1][j]。 买入&#xff1a;f[i][j]max{f[i-w-1][k]k*…

vue3+ts+Go使用百度地图路书实现历史轨迹回放、轨迹回放进度、聚合点、自定义弹框和实时监控视频、多路视频轮巡播放

前言 分享一个刚做完项目集成技术&#xff0c;一个车辆行驶轨迹监控、行车视频监控、对特种车辆安全监管平台&#xff0c;今年政府单位有很多监管平台项目&#xff0c;例如&#xff1a;渣土车监控、租出车监管、危害气体运输车监管等平台&#xff0c;这些平台都有车辆行驶轨迹…

uniapp实现区域滚动、下拉刷新、上滑滚动加载更多

背景&#xff1a; 在uniapp框架中&#xff0c;有两种实现办法。第1种&#xff0c;是首先在page.json中配置页面&#xff0c;然后使用页面的生命周期函数&#xff1b;第2种&#xff0c;使用<scroll-view>组件&#xff0c;然后配置组件的相关参数&#xff0c;包括但不限于&…

Spring(一篇就懂)

Spring框架简介 Spring 是一个开源的Java企业级应用开发框架。 特点&#xff1a; 控制反转&#xff08;IoC&#xff09;&#xff1a;通过依赖注入&#xff08;DI&#xff09;减少组件间的耦合&#xff0c;由Spring容器负责对象的创建和绑定。 面向切面编程&#xff08;AOP&am…

企业高性能web服务器(nginx)

目录 Web服务器基础介绍 正常情况下的单次web服务器访问流程 Apache 经典的 Web服务端 Apache prefork 模型 Apache work模型 Apache event模型 服务端的I/O流程 服务器的I/O 磁盘I/O 网络I/O 网络I/O处理过程 I/O模型 I/O模型相关概念 同步/异步 阻塞/非阻塞 网…

面向对象06:super关键字详解

本节内容视频链接&#xff1a;面向对象10&#xff1a;Super详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p69&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Java中的‌super关键字是一个特殊的引用&#xff0c;‌用于指代父类对象‌。‌在子…

鸿蒙HarmonyOS实战:IPC与RPC设备内进程通信

基本 IPC&#xff08;Inter-Process Communication&#xff09;与RPC&#xff08;Remote Procedure Call&#xff09;用于实现跨进程通信&#xff0c;不同的是前者使用Binder驱动&#xff0c;用于设备内的跨进程通信&#xff0c;后者使用软总线驱动&#xff0c;用于跨设备跨进…

学习yolo+Java+opencv简单案例(三)

主要内容&#xff1a;车牌检测识别&#xff08;什么颜色的车牌&#xff0c;车牌号&#xff09; 模型作用&#xff1a;车牌检测&#xff0c;车牌识别 文章的最后附上我的源码地址。 学习还可以参考我前两篇博客&#xff1a; 学习yoloJavaopencv简单案例&#xff08;一&#xff0…

Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task2

一开始假设的模型是ybw1&#xff0c;但在可视化预测值和真实值后&#xff0c;发现数据具有规律性&#xff0c;因此换成7天 额&#xff0c;不知道为什么要在这里这样引入sigmoid函数&#xff0c;有点怪怪的&#xff0c;但确实用无限多的分段函数就能拟合很多曲线 所以这里的意…

5步实现猫眼电影爬虫与k-means算法可视化分析

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…