DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DAGraphicsResizeableItem.h
1#ifndef DAGRAPHICSRESIZEABLEITEM_H
2#define DAGRAPHICSRESIZEABLEITEM_H
3#include "DAGraphicsItem.h"
4#include <QColor>
5#include <QBrush>
6#include "DAGraphicsViewGlobal.h"
7class QDomDocument;
8class QDomElement;
9namespace DA
10{
11
20class DAGRAPHICSVIEW_API DAGraphicsResizeableItemPalette
21{
22public:
24 : resizeControlPointBorderColor(128, 128, 147)
25 , resizeBorderColor(32, 128, 240)
26 , resizeControlPointBrush(QColor(32, 128, 240))
27 {
28 }
32};
33
47class DAGRAPHICSVIEW_API DAGraphicsResizeableItem : public DAGraphicsItem
48{
49 Q_OBJECT
50 DA_DECLARE_PRIVATE(DAGraphicsResizeableItem)
51public:
71 Q_ENUM(ControlType)
72public:
73 DAGraphicsResizeableItem(QGraphicsItem* parent = nullptr);
78 enum
79 {
81 };
82 int type() const override
83 {
84 return (Type);
85 }
86
87public:
88 // QGraphicsItem需要继承接口
89 QRectF boundingRect() const override;
90 //
91 QPainterPath shape() const override;
92 //
93 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
94 // 保存到xml中
95 virtual bool saveToXml(QDomDocument* doc, QDomElement* parentElement,const QVersionNumber& ver) const override;
96 virtual bool loadFromXml(const QDomElement* itemElement,const QVersionNumber& ver) override;
97
98public: // 尺寸相关接口
99 // 测试一下setBodySize之后getBodySize能得到的尺寸
100 QSizeF testBodySize(const QSizeF& s);
101 // 设置尺寸这里的尺寸是不包括旋转和缩放的辅助控制,如果构造函数中需要设置默认大小,使用changeBodySize
102 virtual void setBodySize(const QSizeF& s);
103 // 绘图的shape,等同于原来的QGraphicsItem::boundingRect
104 QRectF getBodyRect() const;
105 // 获取尺寸,
106 QSizeF getBodySize() const;
107 // 获取body包含控制窗口大小,就是在改变尺寸时包含那8个控制点的最大尺寸
108 QRectF getBodyControlRect() const;
109 // 设置最大最小范围
110 void setBodyMinimumSize(const QSizeF& s);
111 void setBodyMaximumSize(const QSizeF& s);
112 QSizeF getBodyMinimumSize() const;
113 QSizeF getBodyMaximumSize() const;
114 // 设置控制器的大小
115 void setControlerSize(const QSizeF& s);
116 QSizeF getControlerSize() const;
117 // 是否允许
118 void setEnableResize(bool on);
119 bool isResizable() const;
120 // 设置body的位置
121 void setBodyPos(const QPointF& p);
122 void setBodyScenePos(const QPointF& p);
123 // 返回body中心点
124 QPointF getBodyCenterPoint() const;
125 // 获取body中心的位置
126 QPointF getBodyCenterPos() const;
127 // 设置body中心到scene的位置
128 void setBodyCenterPos(const QPointF& p);
129 // 设置TransformOriginPoint自动设置为bodysize的中心,否则为用户自己指定
130 void setAutoCenterTransformOriginPoint(bool on = true);
131 // 更新TransformOriginPoint,前提是setAutoCenterTransformOriginPoint(true)
132 void updateTransformOriginPoint();
133 // 执行变换,返回需要移动的位置和尺寸,尺寸会考虑最大最小
134 QPair< QPointF, QSizeF > doItemResize(const QPointF& mousescenePos);
135
136public:
137 // 需要用户继承的接口
138 // 绘图的shape,等同于原来的QGraphicsItem::shape
139 virtual QPainterPath getBodyShape() const;
140 // 绘制resize边框
141 virtual void paintSelectedBorder(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
142 // 绘制resize控制点
143 virtual void paintResizeControlPoints(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
144 // 绘制背景
145 virtual void paintBackground(QPainter* painter,
146 const QStyleOptionGraphicsItem* option,
147 QWidget* widget,
148 const QRectF& bodyRect);
149 // 绘制边框
150 virtual void paintBorder(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget, const QRectF& bodyRect);
151 // 绘制具体内容
152 virtual void paintBody(QPainter* painter,
153 const QStyleOptionGraphicsItem* option,
154 QWidget* widget,
155 const QRectF& bodyRect) = 0;
156 // 生成controlPoints
157 virtual QRectF controlPointRect(ControlType tp, const QRectF& bodyRect) const;
158 // 控制点的大小
159 virtual QSizeF controlPointSize() const;
160 // 在尺寸变化时调用,例如prepareGeometryChange之后调用
161 void prepareControlInfoChange();
162 // 检测点在哪个控制点上
163 ControlType getControlPointByPos(const QPointF& pos) const;
164 // 判断是否在调整大小中
165 bool isResizing() const;
166
167public:
168 // 下面四个函数是通过scene获取,如果没有scene,返回默认值
169 // 是否允许对齐网格
170 bool isSnapToGrid() const;
171 // 设置网格尺寸
172 QSize getGridSize() const;
173
174protected:
175 // 直接改变bodysize
176 void changeBodySize(const QSizeF& s);
177#if DA_USE_QGRAPHICSOBJECT
178signals:
184 void itemBodySizeChanged(const QSizeF& oldsize, const QSizeF& newsize);
185#endif
186protected:
187 virtual void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override;
188 virtual void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override;
189 virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override;
190 virtual void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
191 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
192 virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
193 QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant& value) override;
194};
195}
196Q_GLOBAL_STATIC(DA::DAGraphicsResizeableItemPalette, daGlobalGraphicsResizeableItemPalette)
197#endif // DAGRAPHICSRESIZEABLEITEM_H
DAGraphicsView的基本元件
Definition DAGraphicsItem.h:19
DAGraphicsResizeableItem对应的样式
Definition DAGraphicsResizeableItem.h:21
QColor resizeBorderColor
缩放时,缩放边框颜色
Definition DAGraphicsResizeableItem.h:30
QBrush resizeControlPointBrush
缩放时,用于调整尺寸的8个点的颜色
Definition DAGraphicsResizeableItem.h:31
QColor resizeControlPointBorderColor
缩放时,用于调整尺寸的8个点的边框颜色
Definition DAGraphicsResizeableItem.h:29
用于调整大小的item
Definition DAGraphicsResizeableItem.h:48
ControlType
表征控制点和控制线的类型
Definition DAGraphicsResizeableItem.h:56
@ ControlPointRightMid
右边中间控制点
Definition DAGraphicsResizeableItem.h:61
@ ControlPointBottomLeft
左下控制点
Definition DAGraphicsResizeableItem.h:64
@ ControlPointTopLeft
左上控制点
Definition DAGraphicsResizeableItem.h:58
@ ControlPointLeftMid
左面中间控制点
Definition DAGraphicsResizeableItem.h:65
@ ControlPointTopMid
顶部中间控制点
Definition DAGraphicsResizeableItem.h:59
@ ControlLineLeft
左边控制线
Definition DAGraphicsResizeableItem.h:66
@ ControlPointBottomRight
右下控制点
Definition DAGraphicsResizeableItem.h:62
@ ControlLineTop
顶部控制线
Definition DAGraphicsResizeableItem.h:67
@ ControlPointBottomMid
底部中间控制点
Definition DAGraphicsResizeableItem.h:63
@ ControlLineRight
右边控制线
Definition DAGraphicsResizeableItem.h:68
@ ControlPointTopRight
右上控制点
Definition DAGraphicsResizeableItem.h:60
void itemBodySizeChanged(const QSizeF &oldsize, const QSizeF &newsize)
itemBodySizeChanged
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44
@ ItemType_DAGraphicsResizeableItem
针对DAGraphicsResizeableItem的类型
Definition DAGraphicsViewGlobal.h:82