-
Notifications
You must be signed in to change notification settings - Fork 17
/
maprectitem.h
72 lines (63 loc) · 2.21 KB
/
maprectitem.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef MAPRECTITEM_H
#define MAPRECTITEM_H
#include "GraphicsMapLib_global.h"
#include <QGraphicsRectItem>
#include <QGeoCoordinate>
/*!
* \brief 矩形
* \note 暂缺少图形拖动的实现
*/
class GRAPHICSMAPLIB_EXPORT MapRectItem : public QObject, public QGraphicsRectItem
{
Q_OBJECT
public:
MapRectItem();
~MapRectItem();
/// 控制可编辑性
void setEditable(const bool &editable);
bool isEditable() const;
void toggleEditable();
/// 设置中心
void setCenter(const QGeoCoordinate ¢er);
/// 设置尺寸 米
void setSize(const QSizeF &size);
/// 设置包围矩形两个对角顶点来自动生成圆形
void setRect(const QGeoCoordinate &first, const QGeoCoordinate &second);
/// 获取中心
const QGeoCoordinate ¢er() const;
/// 获取尺寸
const QSizeF &size() const;
/// 获取四个点的坐标,顺时针方向,左上角为第一个点
QVector<QGeoCoordinate> points() const;
public:
/// 获取所有的实例
static const QSet<MapRectItem*> &items();
signals:
void centerChanged(const QGeoCoordinate ¢er);
void sizeChanged(const QSizeF ¢er);
void doubleClicked();
void editableChanged(bool editable);
protected:
virtual bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override;
/// 被添加到场景后,为控制点添加事件过滤器
virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) override;
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
private:
void updateRect();
void updateEditable();
private:
static QSet<MapRectItem*> m_items; ///< 所有实例
private:
bool m_editable; ///< 鼠标是否可交互编辑
//
QGeoCoordinate m_center; ///< 中心
QSizeF m_size; ///< 宽高
//
QGeoCoordinate m_topLeftCoord; ///< 左上经纬度
QGeoCoordinate m_bottomRightCoord; ///< 右下经纬度
//
QGraphicsRectItem m_rectCtrl; ///< 矩形
QGraphicsEllipseItem m_firstCtrl; ///< 对角控制点1
QGraphicsEllipseItem m_secondCtrl; ///< 对角控制点2
};
#endif // MAPRECTITEM_H