#ifndef ELECTRICCONNECTLINEITEM_H #define ELECTRICCONNECTLINEITEM_H #include #include #include "graphicsBaseItem.h" struct Connection { QUuid nSrcNodeId; int nSrcPort; HandleType srcType; PortPos srcPos; QUuid nDestNodeId; int nDestPort; HandleType destType; PortPos destPos; Connection() { //nSrcNodeId = -1; nSrcPort = -1; srcType = T_none; srcPos = P_top; //nDestNodeId = -1; nDestPort = -1; destType = T_none; destPos = P_top; } Connection(const Connection& obj) { nSrcNodeId = obj.nSrcNodeId; nSrcPort = obj.nSrcPort; srcType = obj.srcType; srcPos = obj.srcPos; nDestNodeId = obj.nDestNodeId; nDestPort = obj.nDestPort; destType = obj.destType; destPos = obj.destPos; } Connection(QUuid nSNI,int nSP,HandleType sT,PortPos sPOS,QUuid nDNI,int nDP,HandleType dT,PortPos dPOS) { nSrcNodeId = nSNI; nSrcPort = nSP; srcType = sT; srcPos = sPOS; nDestNodeId = nDNI; nDestPort = nDP; destType = dT; destPos = dPOS; } bool operator==(const Connection& obj) { return ((obj.nSrcNodeId == nSrcNodeId)&&(obj.nSrcPort == nSrcPort)&&(obj.srcType == srcType)&&(obj.nDestNodeId == nDestNodeId)&&(obj.nDestPort == nDestPort)&&(obj.destType == destType)); } Connection& operator=(const Connection& obj) { if(*this == obj) return *this; nSrcNodeId = obj.nSrcNodeId; nSrcPort = obj.nSrcPort; srcType = obj.srcType; srcPos = obj.srcPos; nDestNodeId = obj.nDestNodeId; nDestPort = obj.nDestPort; destType = obj.destType; destPos = obj.destPos; return *this; } }; class ElectricConnectLineItem : public GraphicsBaseItem { public: ElectricConnectLineItem(QGraphicsItem *parent = 0); virtual ~ElectricConnectLineItem(); void setStartPoint(const QPointF& p); void setEndPoint(const QPointF& p); QPainterPath getPoints(void) const { return m_points; } void moveLine(QPointF); //鼠标点击拖动 void calculatePath(); bool addConnection(); void resetCurLine(){_curLine = QPoint();} //void updateConnection(QUuid callerId,QPointF pos); //外部调用的更新函数,id为调用者id void setConnection(Connection con){m_connectState = con;} Connection getConnection() const {return m_connectState;} //QUuid getOppositeId(QUuid); //获取另一端点id protected: virtual QPainterPath shape() const override; virtual QRectF boundingRect() const override; virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; private: Connection m_connectState; QPainterPath m_points; QPainterPath m_pointsBoundingRect; //包裹点的矩形集合 QList m_lstPoints; QPoint _curLine; //参数1用点序号表示的当前线段起始点,参数2表示线段方向 //QPointF m_pStart; //QPointF m_pEnd; }; #endif