1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #pragma once
- #include "Common.h"
- #include "CommonDraw.h"
- /// <summary>
- /// 参考线信息参数结构体
- /// </summary>
- typedef struct _tagUiRefLineInfo
- {
- // 参考线涉及的源控件和目的控件
- QWidget* srcWidget;
- QWidget* dstWidget;
- // 参考线涉及的源控件和目的控件的边
- SIDE_DIRECTION srcSide;
- SIDE_DIRECTION dstSide;
- _tagUiRefLineInfo()
- {
- srcWidget = nullptr;
- dstWidget = nullptr;
- srcSide = SIDE_DIRECTION::SIDE_NONE;
- dstSide = SIDE_DIRECTION::SIDE_NONE;
- }
- // 按照参数构造RefLine信息
- _tagUiRefLineInfo(QWidget* srcWidget, QWidget* dstWidget, SIDE_DIRECTION srcSide, SIDE_DIRECTION dstSide)
- {
- this->srcWidget = srcWidget;
- this->dstWidget = dstWidget;
- this->srcSide = srcSide;
- this->dstSide = dstSide;
- }
- // 重载 == 做比较
- bool operator == (const _tagUiRefLineInfo& lineInfo)
- {
- if (this->srcWidget == lineInfo.srcWidget
- && this->dstWidget == lineInfo.dstWidget
- && this->srcSide == lineInfo.srcSide
- && this->dstSide == lineInfo.dstSide
- )
- {
- return true;
- }
- return false;
- }
- } UI_REFLINE_INFO;
- /// <summary>
- /// UI参考线类,用于绘制和显示UI界面中控件移动的参考线
- /// </summary>
- class WindowAppItemRefLine : public QObject, public QGraphicsLineItem
- {
- Q_OBJECT
- public:
- WindowAppItemRefLine(const UI_REFLINE_INFO& lineInfo);
- // 设定本Item的自定义类型
- enum { Type = ITEM_TYPE_REF_LINE };
- int type() const
- {
- // 针对该 item 启用 qgraphicsitem_cast
- return Type;
- }
- public:
- // 本参考线的具体参数信息
- UI_REFLINE_INFO m_refLineInfo;
- protected slots:
- // 绘制线条
- void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override;
- protected:
- // 根据最新的控件位置信息,计算当前参考线中的起点和终点信息(方向为从上到下,从左到右)
- void calcLineVertex(
- QWidget* srcWidget,
- QWidget* dstWidget,
- _Out_ QPoint& startPoint,
- _Out_ QPoint& endPoint
- );
- };
|