#ifndef EDITITEMS_H #define EDITITEMS_H //组态过程中的item #include #include #include "global.h" class DiagramEditorBaseBlock; class EditBaseItem : public QGraphicsWidget { Q_OBJECT public: EditBaseItem(QGraphicsItem *parent = nullptr); virtual ~EditBaseItem(); virtual void setName(const QString& s){sName = s;} virtual QString getName(){return sName;} virtual void setType(EditorItemType tpe) {nType = tpe;} virtual EditorItemType getType(){return nType;} virtual void setBoundingRect(QRectF rec) {m_boundingRect = rec;} virtual QRectF boundingRect() const override {return m_boundingRect;} virtual void setBlockData(QPointer p){_pBlock = p;} virtual QPointer getBlockData(){return _pBlock;} virtual QString getShowType(){return QString();} //获取显示类别 virtual QString getEditState(); //获取详细编辑状态 signals: void itemDbClicked(QPointer); protected: virtual QPainterPath shape(); virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) override; protected: QString sName; EditorItemType nType; QRectF m_boundingRect; QPointer _pBlock; }; /********************bus*********************/ class EditBusItem: public EditBaseItem { Q_OBJECT public: EditBusItem(QGraphicsItem *parent = nullptr); virtual ~EditBusItem(); virtual void setGeometry(const QRectF &rect) override; protected: virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; }; /********************bay*********************/ class EditBayItem: public EditBaseItem { Q_OBJECT public: EditBayItem(QGraphicsItem *parent = nullptr); virtual ~EditBayItem(); virtual QString getShowType() override; protected: virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; }; /********************trans*********************/ class EditTransItem: public EditBaseItem { Q_OBJECT public: EditTransItem(QGraphicsItem *parent = nullptr); virtual ~EditTransItem(); virtual QString getShowType() override; protected: virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; }; /********************连线*********************/ class EditLineItem : public EditBaseItem { public: EditLineItem(QGraphicsItem *parent = nullptr); virtual ~EditLineItem(); void setStartPoint(const QPointF& p); void setEndPoint(const QPointF& p); QPainterPath getPoints(void) const { return m_points; } void calculatePath(int nSeg = 2); //划分段数,2段3段 void resetCurLine(){_curLine = QPoint();} protected: virtual QPainterPath shape() const override; virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; private: QPainterPath m_points; QPainterPath m_pointsBoundingRect; //包裹点的矩形集合 QList m_lstPoints; QPoint _curLine; //参数1用点序号表示的当前线段起始点,参数2表示线段方向 }; #endif