2024-08-16 11:39:30 +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, //创建
|
|
|
|
|
|
ST_moving, //移动
|
|
|
|
|
|
ST_editing, //顶点编辑
|
|
|
|
|
|
ST_scaling, //缩放
|
2024-08-26 17:27:37 +08:00
|
|
|
|
ST_rotation, //旋转
|
2024-08-16 11:39:30 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum OperationMode
|
|
|
|
|
|
{
|
|
|
|
|
|
OM_none = 0,
|
|
|
|
|
|
OM_move, //移动
|
|
|
|
|
|
OM_create, //创建
|
|
|
|
|
|
OM_edit, //顶点编辑
|
|
|
|
|
|
OM_scale, //缩放
|
|
|
|
|
|
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; }
|
|
|
|
|
|
//void setOperationMode(OperationMode m) { m_opMode = m; }
|
|
|
|
|
|
OperationMode getOperationMode() { return ms_opMode; }
|
|
|
|
|
|
|
|
|
|
|
|
void setCursor(DesignerScene*, const QCursor&);
|
|
|
|
|
|
|
|
|
|
|
|
signals:
|
|
|
|
|
|
void setWorkingSelector(SelectorType);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
2024-08-26 17:27:37 +08:00
|
|
|
|
//静态变量,用于不同类型selector间的成员共享
|
2024-08-16 11:39:30 +08:00
|
|
|
|
static OperationMode ms_opMode;
|
|
|
|
|
|
static QPointF ms_ptMouseDown;
|
|
|
|
|
|
static QPointF ms_ptMouseLast;
|
2024-08-26 17:27:37 +08:00
|
|
|
|
static double ms_dAngleMouseDownToItem; //鼠标按下时其位置和item中心点形成的夹角
|
2024-08-16 11:39:30 +08:00
|
|
|
|
static int ms_nDragHandle; //当前抓取的控制点
|
|
|
|
|
|
|
|
|
|
|
|
SelectorType m_type;
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
bool m_bHoverOnHandel; //鼠标是否悬停在handel
|
|
|
|
|
|
OperationMode m_opMode;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|