#pragma once #include "Common.h" #include "CommonDraw.h" class WindowAppBlockComment : public QGraphicsTextItem { Q_OBJECT public: WindowAppBlockComment(QGraphicsItem* parent = nullptr); ~WindowAppBlockComment(); //// 设置注释的文字 //void setComment(const QString& strComm); // 设定本Item的自定义类型 enum { Type = ITEM_TYPE_COMMENT }; int type() const override { return Type; } protected slots: // 绘制注释控件边框 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; // 在选中发生变化时 QVariant itemChange(GraphicsItemChange change, const QVariant& value) override; void focusOutEvent(QFocusEvent* event) override; // void keyReleaseEvent(QKeyEvent* event) override; // 在文本内容变更时触发,自动更新边距 void onContentsChanged(); // 响应双击事件,激活文本编辑模式 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event); //// 键盘按下时(回车键结束编辑) //void keyPressEvent(QKeyEvent* event) override; // 计算区域边界 QRectF boundingRect() const override; // 重写Shape函数,使其没有文字的空白部分也可以响应消息 QPainterPath shape() const override; //void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override; //void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override; void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override; void mousePressEvent(QGraphicsSceneMouseEvent* event) override; void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override; // 绘制选中状态 virtual void paintSelected(QPainter* painter, int iLineWidth); signals: void lostFocus(WindowAppBlockComment* item); void selectedChange(QGraphicsItem* item); protected: // 初始化UI风格 void initStyle(); // 绘制边框 void drawFrame(QPainter* painter); //// 绘制文字 //void drawContent(QPainter* painter); // 更新矩形区域的尺寸 void updateRect(); //// 刷新全部(包括文字和尺寸) //void updateAll(); protected: // 控件的拉伸状态 enum ResizeDirection { ResizeNone = 0, ResizeLeft = 1, ResizeRight = 2, ResizeTop = 4, ResizeBottom = 8, AllDirections = 15, }; // 当前拉伸的方向 quint32 reDirection; // 主体矩形区域 QRectF blockRect; //// 边界矩形区域 //QRectF blockBoundingRect; // 是否处于选中状态 bool m_bSel; // 注释的文字 QString m_strComment; // 是否处于拉伸状态中 bool resizing; // 保存上一次的状态 QPointF oldPos; int oldWidth; int oldHeight; };