diff --git a/include/graphicsItem/graphicsBaseItem.h b/include/graphicsItem/graphicsBaseItem.h index 598ab2f..de2776e 100644 --- a/include/graphicsItem/graphicsBaseItem.h +++ b/include/graphicsItem/graphicsBaseItem.h @@ -8,6 +8,13 @@ #include #include +enum ShapeType +{ + T_undefined, + T_item, + T_group +}; + //基类采用模板形式,QGraphicsItem是默认值,也可以是别的类型,比如QGraphicsItemGroup,这样不同的基类继承可以共用一些高层的行为定义 template class AbstractShapeType : public BaseType @@ -16,6 +23,7 @@ public: explicit AbstractShapeType(QGraphicsItem *parent = 0) : BaseType(parent) { + m_type = T_undefined; m_pen = QPen(Qt::NoPen); m_brush = QBrush(QColor(rand() % 32 * 8, rand() % 32 * 8, rand() % 32 * 8)); m_dWidth = m_dHeight = 0; @@ -36,6 +44,8 @@ public: } public: + virtual ShapeType getType() {return m_type;} + QPen pen() { return m_pen; } void setPen(const QPen &pen) { m_pen = pen; } QColor penColor() { return m_pen.color(); } @@ -247,12 +257,13 @@ public: } protected: - QPen m_pen; - QBrush m_brush; - double m_dWidth; - double m_dHeight; - QRectF m_boundingRect; - QRectF m_boundingRect_selected;//选中矩形框 + ShapeType m_type; + QPen m_pen; + QBrush m_brush; + double m_dWidth; + double m_dHeight; + QRectF m_boundingRect; + QRectF m_boundingRect_selected;//选中矩形框 QGraphicsPathItem* m_pOperationCopy; //图元移动和旋转时的操作副本 QPointF m_movingIniPos; //移动副本开始移动初始点 diff --git a/source/designerScene.cpp b/source/designerScene.cpp index 6bd12c7..9076cc2 100644 --- a/source/designerScene.cpp +++ b/source/designerScene.cpp @@ -132,6 +132,12 @@ GraphicsItemGroup* DesignerScene::createGroup() QList listItem = selectedItems(); if(listItem.isEmpty()) return nullptr; + else if(listItem.count() == 1) //判断只选中了一个时是不是已经打组,如果是不做操作,防止循环打组 + { + AbstractShape* item = qgraphicsitem_cast(listItem.first()); + if(item && item->getType()==T_group) + return nullptr; + } GraphicsItemGroup* group = new GraphicsItemGroup(); group->addItems(listItem); diff --git a/source/graphicsItem/graphicsBaseItem.cpp b/source/graphicsItem/graphicsBaseItem.cpp index ecba3e5..f7e56a5 100644 --- a/source/graphicsItem/graphicsBaseItem.cpp +++ b/source/graphicsItem/graphicsBaseItem.cpp @@ -4,6 +4,7 @@ GraphicsBaseItem::GraphicsBaseItem(QGraphicsItem *parent) : AbstractShapeType(parent) { + m_type = T_item; //初始化缩放操作用的handle m_vecHanle.reserve(H_left); for(int i = H_leftTop; i <= H_left; i++) diff --git a/source/graphicsItem/graphicsItemGroup.cpp b/source/graphicsItem/graphicsItemGroup.cpp index 5b241ae..ba9054c 100644 --- a/source/graphicsItem/graphicsItemGroup.cpp +++ b/source/graphicsItem/graphicsItemGroup.cpp @@ -7,6 +7,8 @@ GraphicsItemGroup::GraphicsItemGroup(QGraphicsItem *parent) : AbstractShapeType(parent) { + m_type = T_group; + m_boundingRect = QRectF(); m_lastBoudingRect = QGraphicsItemGroup::boundingRect(); @@ -211,7 +213,10 @@ void GraphicsItemGroup::moveOperationCopy(const QPointF& distance) void GraphicsItemGroup::rotateOperationCopy(const double& dAngle) { if(m_pOperationCopy) + { m_pOperationCopy->setRotation(dAngle); + } + } void GraphicsItemGroup::addItems(const QList& items)