123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- #pragma once
- #include "Common.h"
- #include "CommonDraw.h"
- /// <summary>
- /// 功能块图形的基类
- /// </summary>
- class WindowAppItemInterface;
- class POU;
- class WindowAppBlockBase : public QGraphicsObject
- {
- Q_OBJECT
-
- // 添加这一行,否则会出现警告:Warning: qobject_cast to QGraphicsItem will not work!
- Q_INTERFACES(QGraphicsItem)
- public:
- WindowAppBlockBase(
- TOOL* pTool,
- POU* Pou,
- bool bShowOnly,
- QGraphicsObject* parent
- );
- // 本Block对应的Interface(绘图用)
- QVector<WindowAppItemInterface*> m_itemInterfaces;
- // 添加接口(纯虚函数)
- virtual void addItemInterfaces() = 0;
- // 2022-6-22 查找某个InferfaceItem是否在本Block内
- bool isInBlock(WindowAppItemInterface* infItem);
- QRectF boundingRect() const override;
- // 是否可以被删除(引用计数=0,且没有被Task使用)
- bool couldBeDeleted();
- protected:
- void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
-
- // 显示右键菜单
- void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
- // 功能块有变动时
- QVariant itemChange(GraphicsItemChange change, const QVariant& value) override;
- // 鼠标左键按下
- void mousePressEvent(QGraphicsSceneMouseEvent* event);
- // 鼠标左键抬起
- void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
- signals:
- // 功能块位置改变
- void blockMoveSignal(QGraphicsItem* item);
- protected:
- // 绘制功能块
- void DrawBlock(QPainter* painter);
- // 绘制功能块阴影
- void DrawBlockShadow(QPainter* painter);
- // 更新ItemInterface的位置
- void updateInterfacesPostion();
- //// 更新单个Interface的位置
- //void updateInterfacePostion(WindowAppItemInterface* pInfItem);
- // 重绘所有的Interface
- void redrawAllInterface();
- // 初始化功能块的右键菜单
- void createContextMenu();
- // 返回本功能块的引用计数(所有接口引用计数之和)
- int getRefCount();
- // 2021-8-17 检查功能块位置(碰撞检测,限制移动范围)
- QVariant checkPosition(const QVariant& value);
- // 2021-8-17 处理碰撞判断
- bool checkCollision();
- // 2021-8-17 限制功能块在场景内
- bool restrictBlockPos(QPointF curPos);
- // 2022-10-4,删除当前功能块(统一功能块的删除入口)
- void onDeleteItem();
- public:
- // 对应的工具数据信息
- TOOL* m_toolInfo;
- protected:
- // 主体矩形区域
- QRectF blockRect;
- // 功能块的序号矩形区域
- QRectF blockIndexRect;
- // 边界矩形区域(未计算接口长度)
- QRectF blockBoundingRect;
- //// 总矩形区域(算上接口长度)
- //QRectF blockTotalRect;
- // 本工具所属的Pou
- POU* m_pPou;
-
- // 是否仅供展示使用(不提供右键菜单以及其他互动功能)
- bool m_bShowOnly;
- // 经过调整之后的功能块的位置(经过碰撞检测、边界检测后)
- QPointF m_fixPos;
- // 2022-10-2增加,功能块移动前的位置(用于执行Undo)
- QPointF m_oldPos;
- protected:
- // 功能块的右键菜单
- QMenu* contextMenu;
- // 右键菜单对应的action
- QAction* executeAction;
- QAction* executeSubAction;
- QAction* executeAllAction;
- QAction* executeBreakPoint;
- QAction* moveUpAction;
- QAction* moveDownAction;
- QAction* moveFirstAction;
- QAction* moveLastAction;
- QAction* deleteAction;
- QAction* propertyAction;
- QAction* copyBlockAction;
- QAction* copyDataAction;
- QAction* pasteAction;
- };
|