/** *\file baseSelector.h * *\brief selector是用来实现对图元进行具体操作的类,例如创建、编辑、旋转、移动等,通过对鼠标的行为动作进行具体的逻辑编写实现操作表达 * *\author dsc */ #ifndef BASESELECTOR_H #define BASESELECTOR_H #include #include "designerScene.h" enum SelectorType { ST_base = 0, //基本 ST_cerating, //创建 ST_moving, //移动 ST_editing, //顶点编辑 ST_scaling, //缩放 ST_rotation, //旋转 ST_connecting, //连接 ST_subMoving, //子对象移动 ST_linkMoving, //连接线移动 }; enum OperationMode { OM_none = 0, OM_move, //移动 OM_create, //创建 OM_edit, //顶点编辑 OM_scale, //缩放 OM_rotate, //旋转 OM_connect, //连接 OM_subMove,//子对象移动 OM_linkMove, //连接线移动 }; class GraphicsBaseItem; using ItemMap = QMap>; class BaseSelector : public QObject { Q_OBJECT public: explicit BaseSelector(FixedPortsModel* model,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&); void setSceneName(const QString& str) {m_sceneName = str;} QString sceneName() const {return m_sceneName;} signals: void setWorkingSelector(SelectorType); protected: //静态变量,用于不同类型selector间的成员共享 static OperationMode ms_opMode; static QPointF ms_ptMouseDown; static QPointF ms_ptMouseLast; static double ms_dAngleMouseDownToItem; //鼠标按下时其位置和item中心点形成的夹角 static int ms_nDragHandle; //当前抓取的控制点 SelectorType m_type; QString m_sceneName; FixedPortsModel* _model; private: bool m_bHoverOnHandel; //鼠标是否悬停在handel OperationMode m_opMode; }; #endif