12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #pragma once
- #include "Common.h"
- #include "CommonDraw.h"
- /// <summary>
- /// 用于显示功能块等高线和等宽线的信息参数结构体
- /// </summary>
- 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;
- /// <summary>
- /// UI等高线类,用于绘制和现实UI界面中控件尺寸对齐时显示的等高线和等宽线
- /// </summary>
- 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);
- };
|