qt-PLC可视化编辑器

devtools/2024/9/23 13:13:18/

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.ppmy.cn/devtools/100134.html

相关文章

opencv应用形态学(全网最详细)

引言 在图像处理领域&#xff0c;形态学操作是一种强大的工具&#xff0c;它基于图像的形状和结构来进行处理。形态学开运算是其中一种基础且常用的形态学操作&#xff0c;它主要通过先腐蚀后膨胀的方式&#xff0c;实现去除小物体、平滑较大物体轮廓的效果&#xff0c;同时尽…

【C语言】常见文件操作

文件的常见操作 #include<stdio.h>// 由于devc代码编码为ANCI&#xff0c;故读取的文件中若有中文&#xff0c;请设置文件编码为ANCI&#xff0c;否则会乱码 // 读文件 void test1() {char ch;FILE *fp; // 创建文件指针fp fopen("./file.txt", "r"…

服务发现与负载均衡基础概念

服务发现和负载均衡是分布式系统中的两个关键技术&#xff0c;它们为系统的高可用性、可扩展性和灵活性提供了基础。下面我将详细讲解这两个概念及其在现代系统中的重要性、实现方式和常见的工具。 一、服务发现&#xff08;Service Discovery&#xff09; 1.1 . 什么是服务发…

OpenCV基本使用教程

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;用于处理图像和视频的分析和处理。下面是OpenCV的基本使用教程&#xff1a; 安装OpenCV&#xff1a;首先需要下载和安装OpenCV库。可以在OpenCV的官方网站上找到适合你…

代码随想录Day 23|回溯Part02,39.组合总和、40.组合总和Ⅱ、131.分割回文串

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 第七章 回溯算法part03一、题目题目一&#xff1a; 39. 组合总和解题思路&#xff1a;回溯三部曲剪枝优化小结&#xff1a; 题目二&#xff1a;40.组合总和Ⅱ解题思路&#xff1a;回溯三部曲 题目…

Python高光谱遥感数据处理与机器学习深度应用

高光谱遥感信息对于我们认识世界具有重要意义。尽管大部分物质在人眼中看似无异&#xff0c;然而高光谱遥感的观察下&#xff0c;它们呈现出独特的"光谱特征"。这种能够窥见事物的"本质"能力具备着革命性的潜能&#xff0c;对精准农业、地球观测、艺术分析…

计算机视觉编程

目录 灰色度 缩略图 拷贝粘贴区域 调整图像尺寸 旋转图像45 画图线、描点 灰色度 灰度是指图像中每个像素的亮度值&#xff0c;用来描述图像中各个像素的明暗程度。在计算机视觉中&#xff0c;灰度可以通过以下方式来计算&#xff1a; 1. 平均值法&#xff1a;将图像中每…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 07数据中心的边缘

本章将帮助你回答以下问题 可以用哪些方式将 Clos 拓扑连接到外部网终?边缘部署路由协议的最佳实践是什么?企业应如何处理混合云中的连接? 连接模型 为什么要连接到外部世界? 数据中心连接到外部世界的原因很多。如果你要对外提供某种服务(例如搜索服务广告推荐系统或内…