diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index b7e8d4288..74d25b204 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -501,6 +501,7 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi qp -> drawEllipse(QRectF(point.x() - 1.5, point.y() - 1.5, 3.0, 3.0)); } } + qp -> restore(); } @@ -723,9 +724,21 @@ QPainterPath Conductor::shape() const QPainterPath shape_(pps.createStroke(path())); - if (isSelected()) - foreach (QRectF rect, m_handler.handlerRect(handlerPoints())) - shape_.addRect(rect); + /** + Add handle rect to path, occur a weird bug. + when the conductor is removed from the scene he continue to be painted in the scene and make artefact. + If we save (exactly when we clear the undo stack of project when saving), Qet crash, + Don't add the handle rect to the path seem to work well. + More information here : + https://qelectrotech.org/bugtracker/view.php?id=107 + https://qelectrotech.org/forum/viewtopic.php?pid=5619#p5619 + https://qelectrotech.org/forum/viewtopic.php?pid=5067#p5067 + **/ +// if (isSelected()) { +// foreach (QRectF rect, m_handler.handlerRect(handlerPoints())) { +// shape_.addRect(rect); +// } +// } return shape_; } diff --git a/sources/qetgraphicsitem/qetshapeitem.cpp b/sources/qetgraphicsitem/qetshapeitem.cpp index b4bb615e4..cbdd3238b 100644 --- a/sources/qetgraphicsitem/qetshapeitem.cpp +++ b/sources/qetgraphicsitem/qetshapeitem.cpp @@ -246,22 +246,26 @@ QPainterPath QetShapeItem::shape() const pps.setJoinStyle(Qt::RoundJoin); path = pps.createStroke(path); - if (isSelected()) - { - QVector vector; + /** + Code below is commented to avoid weird bug see : QPainterPath Conductor::shape() const + for more information + **/ +// if (isSelected()) +// { +// QVector vector; - if (m_shapeType == Line) - vector << m_P1 << m_P2; - else if (m_shapeType == Rectangle || m_shapeType == Ellipse) { - QRectF rect (m_P1, m_P2); - vector << rect.topLeft() << rect.topRight() << rect.bottomRight() << rect.bottomLeft(); - } - else - vector = m_polygon; +// if (m_shapeType == Line) +// vector << m_P1 << m_P2; +// else if (m_shapeType == Rectangle || m_shapeType == Ellipse) { +// QRectF rect (m_P1, m_P2); +// vector << rect.topLeft() << rect.topRight() << rect.bottomRight() << rect.bottomLeft(); +// } +// else +// vector = m_polygon; - foreach(QRectF r, m_handler.handlerRect(vector)) - path.addRect(r); - } +// foreach(QRectF r, m_handler.handlerRect(vector)) +// path.addRect(r); +// } return (path); }