#pragma once #include "WindowAppBlockBase.h" class WindowAppBlockComment : public WindowAppBlockBase { Q_OBJECT public: WindowAppBlockComment( TOOL* pNewTool, POU* Pou, bool bShowOnly = false, QGraphicsObject* parent = nullptr ); ~WindowAppBlockComment(); //// 设置注释的文字 //void setComment(const QString& strComm); // 设定本Item的自定义类型 enum { Type = ITEM_TYPE_COMMENT }; int type() const override { return Type; } // 获取注释控件的文字内容 QString content() { // 把Tool中的Info字段用来做Comment的注释 return this->m_toolInfo->strInfo; } // 添加接口(虚函数,注释工具不需要添加接口) virtual void addItemInterfaces() {}; protected slots: // 绘制注释控件边框 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; // 响应双击事件,弹出编辑内容对话框 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event); // 计算区域边界 QRectF boundingRect() const override; // 鼠标悬浮事件(用于显示拉伸用的鼠标) void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override; // 鼠标按下事件(用于触发控件拉伸) void mousePressEvent(QGraphicsSceneMouseEvent* event) override; // 鼠标移动事件(用于拉伸控件) void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override; // 鼠标释放事件(用于鼠标还原以及接收拉伸状态) void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override; // 菜单 - Delete void onMenuDelete(); signals: // 内容为空信号,如果内容为空,则删除本注释控件 void emptyContent(WindowAppBlockComment* item); protected: // 初始化UI风格 void initStyle(); // 绘制边框 void drawFrame(QPainter* painter); // 绘制文字 void drawContent(QPainter* painter); // 更新矩形区域的尺寸 void updateRect(); // 刷新全部(包括文字和尺寸) void updateAll(); // 初始化功能块的右键菜单 void createContextMenu(); protected: // 控件的拉伸方向 enum ResizeDirection { ResizeNone = 0, ResizeLeft = 1, ResizeRight = 2, ResizeTop = 4, ResizeBottom = 8, AllDirections = 15, }; // 当前拉伸的方向 quint32 reDirection; // 是否处于拉伸状态中 bool isResizing; };