#pragma once #include "Common.h" #include "CommonDraw.h" /// /// 用于显示功能块等高线和等宽线的信息参数结构体 /// typedef struct _tagUiIsoLineInfo { // 需要绘制等宽线的控件信息 QWidget* pWidget; // 等宽线的绘制方向 SIDE_DIRECTION sideDir; // 当前拖拽方向(仅确定源控件的等宽线位置时需要用到) STRETCH_DIRECTION stretchDir; // 默认构造函数 _tagUiIsoLineInfo() { pWidget = nullptr; sideDir = SIDE_DIRECTION::SIDE_NONE; stretchDir = STRETCH_DIRECTION::DIR_NONE; } // 带参数构造函数 _tagUiIsoLineInfo( QWidget* widget, SIDE_DIRECTION side, STRETCH_DIRECTION sDir = STRETCH_DIRECTION::DIR_NONE ) { this->pWidget = widget; this->sideDir = side; this->stretchDir = sDir; } } UI_ISOLINE_INFO; /// /// UI等高线类,用于绘制和现实UI界面中控件尺寸对齐时显示的等高线和等宽线 /// class WindowAppItemIsometricLine : public QObject, public QGraphicsLineItem { Q_OBJECT public: WindowAppItemIsometricLine(const UI_ISOLINE_INFO& lineInfo); // 设定本Item的自定义类型 enum { Type = ITEM_TYPE_ISO_LINE }; int type() const { // 针对该 item 启用 qgraphicsitem_cast return Type; } public: // 本等宽线的具体参数信息 UI_ISOLINE_INFO m_isoLineInfo; protected slots: // 绘制线条 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; protected: // 绘制等宽线 void drawIsoLines(QPainter* painter); // 在指定的边旁边绘制等宽线 void drawIsoLines(QPainter* painter, const QLine& side, SIDE_DIRECTION sideDir); // 绘制箭头线条 void drawIsoArrowLines(QPainter* painter, QLine line1, QLine line2, SIDE_DIRECTION sideDir); // 为指定的线条绘制箭头 void drawIsoArrow(QPainter* painter, QLineF isoLine); };