HMI/include/util/baseSelector.h

74 lines
2.0 KiB
C
Raw Normal View History

2026-07-03 11:29:21 +08:00
/**
*\file baseSelector.h
*
*\brief selector是用来实现对图元进行具体操作的类
*
*\author dsc
*/
#ifndef BASESELECTOR_H
#define BASESELECTOR_H
#include <QObject>
#include "designerScene.h"
enum SelectorType
{
ST_base = 0, //基本
ST_cerating, //创建
2026-07-06 18:17:10 +08:00
ST_moving, //移动
ST_editing, //顶点编辑
ST_scaling, //缩放
2026-07-03 11:29:21 +08:00
ST_rotation, //旋转
};
enum OperationMode
{
OM_none = 0,
2026-07-06 18:17:10 +08:00
OM_move, //移动
2026-07-03 11:29:21 +08:00
OM_create, //创建
2026-07-06 18:17:10 +08:00
OM_edit, //顶点编辑
OM_scale, //缩放
2026-07-03 11:29:21 +08:00
OM_rotate, //旋转
};
class BaseSelector : public QObject
{
Q_OBJECT
public:
explicit BaseSelector(QObject *parent = 0);
virtual ~BaseSelector();
public:
virtual void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*);
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*, DesignerScene*);
SelectorType getSelectorType() { return m_type; }
2026-07-06 18:17:10 +08:00
// void setOperationMode(OperationMode m) { m_opMode = m; }
// OperationMode getOperationMode() { return s_opMode; }
2026-07-03 11:29:21 +08:00
void setCursor(DesignerScene*, const QCursor&);
signals:
void setWorkingSelector(SelectorType);
protected:
2026-07-06 18:17:10 +08:00
// 静态变量用于不同类型selector间的成员共享
// static OperationMode s_opMode;
static QPointF s_ptMouseDown;
static QPointF s_ptMouseLast;
static double s_dAngleMouseDownToItem; //鼠标按下时其位置和item中心点形成的夹角
static int s_nDragHandle; //当前抓取的控制点
2026-07-03 11:29:21 +08:00
SelectorType m_type;
private:
bool m_bHoverOnHandel; //鼠标是否悬停在handel
OperationMode m_opMode;
};
#endif