From 8acb3f757859140984f0d46b5de013e9f99c15ce Mon Sep 17 00:00:00 2001 From: dismine Date: Wed, 30 Jul 2014 11:58:40 +0300 Subject: [PATCH] Remove border around qgraphicsitem. --HG-- branch : develop --- src/app/visualization/vcontrolpointspline.cpp | 13 +++++++++++++ src/app/visualization/vcontrolpointspline.h | 1 + src/app/visualization/vsimplecurve.cpp | 15 ++++++++++++++- src/app/visualization/vsimplecurve.h | 1 + src/app/visualization/vsimplesplinepath.cpp | 17 +++++++++++++++-- src/app/visualization/vsimplesplinepath.h | 1 + 6 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/app/visualization/vcontrolpointspline.cpp b/src/app/visualization/vcontrolpointspline.cpp index 9a8f46b3e..77e1aaab5 100644 --- a/src/app/visualization/vcontrolpointspline.cpp +++ b/src/app/visualization/vcontrolpointspline.cpp @@ -66,6 +66,19 @@ VControlPointSpline::VControlPointSpline(const qint32 &indexSpline, SplinePointP controlLine->setFlag(QGraphicsItem::ItemStacksBehindParent, true); } +//--------------------------------------------------------------------------------------------------------------------- +void VControlPointSpline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + /* From question on StackOverflow + * https://stackoverflow.com/questions/10985028/how-to-remove-border-around-qgraphicsitem-when-selected + * + * There's no interface to disable the drawing of the selection border for the build-in QGraphicsItems. The only way + * I can think of is derive your own items from the build-in ones and override the paint() function:*/ + QStyleOptionGraphicsItem myOption(*option); + myOption.state &= ~QStyle::State_Selected; + QGraphicsEllipseItem::paint(painter, &myOption, widget); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief hoverMoveEvent handle hover move events. diff --git a/src/app/visualization/vcontrolpointspline.h b/src/app/visualization/vcontrolpointspline.h index cb6283378..20212c346 100644 --- a/src/app/visualization/vcontrolpointspline.h +++ b/src/app/visualization/vcontrolpointspline.h @@ -42,6 +42,7 @@ class VControlPointSpline : public QObject, public QGraphicsEllipseItem public: VControlPointSpline(const qint32 &indexSpline, SplinePointPosition position, const QPointF &controlPoint, const QPointF &splinePoint, QGraphicsItem * parent = nullptr); + virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0); signals: /** * @brief ControlPointChangePosition emit when control point change position. diff --git a/src/app/visualization/vsimplecurve.cpp b/src/app/visualization/vsimplecurve.cpp index d7cebe5ba..f46cb3edf 100644 --- a/src/app/visualization/vsimplecurve.cpp +++ b/src/app/visualization/vsimplecurve.cpp @@ -62,6 +62,19 @@ void VSimpleCurve::ChangedActivDraw(const bool &flag) setPen(QPen(*currentColor, qApp->toPixel(qApp->widthHairLine())/ *factor)); } +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleCurve::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + /* From question on StackOverflow + * https://stackoverflow.com/questions/10985028/how-to-remove-border-around-qgraphicsitem-when-selected + * + * There's no interface to disable the drawing of the selection border for the build-in QGraphicsItems. The only way + * I can think of is derive your own items from the build-in ones and override the paint() function:*/ + QStyleOptionGraphicsItem myOption(*option); + myOption.state &= ~QStyle::State_Selected; + QGraphicsPathItem::paint(painter, &myOption, widget); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief mouseReleaseEvent handle mouse release events. @@ -73,7 +86,7 @@ void VSimpleCurve::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { emit Choosed(id); } - QGraphicsItem::mouseReleaseEvent(event); + QGraphicsPathItem::mouseReleaseEvent(event); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/visualization/vsimplecurve.h b/src/app/visualization/vsimplecurve.h index 9cebeb2a1..bb2cd3977 100644 --- a/src/app/visualization/vsimplecurve.h +++ b/src/app/visualization/vsimplecurve.h @@ -42,6 +42,7 @@ class VSimpleCurve : public QObject, public QGraphicsPathItem public: VSimpleCurve(quint32 id, Qt::GlobalColor *currentColor, qreal *factor = nullptr, QObject *parent = 0); void ChangedActivDraw(const bool &flag); + virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0); signals: /** * @brief Choosed send id when clicked. diff --git a/src/app/visualization/vsimplesplinepath.cpp b/src/app/visualization/vsimplesplinepath.cpp index 1456ec480..3e9ac81fd 100644 --- a/src/app/visualization/vsimplesplinepath.cpp +++ b/src/app/visualization/vsimplesplinepath.cpp @@ -40,9 +40,22 @@ * @param factor scale factor. */ VSimpleSplinePath::VSimpleSplinePath(VPattern *doc, VContainer *data, quint32 id, qreal *factor) - :VAbstractTool(doc, data, id), factor(factor) + :VAbstractTool(doc, data, id), QGraphicsPathItem(), factor(factor) {} +//--------------------------------------------------------------------------------------------------------------------- +void VSimpleSplinePath::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + /* From question on StackOverflow + * https://stackoverflow.com/questions/10985028/how-to-remove-border-around-qgraphicsitem-when-selected + * + * There's no interface to disable the drawing of the selection border for the build-in QGraphicsItems. The only way + * I can think of is derive your own items from the build-in ones and override the paint() function:*/ + QStyleOptionGraphicsItem myOption(*option); + myOption.state &= ~QStyle::State_Selected; + QGraphicsPathItem::paint(painter, &myOption, widget); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief mouseReleaseEvent handle mouse release events. @@ -54,7 +67,7 @@ void VSimpleSplinePath::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { emit ChoosedTool(id, SceneObject::SplinePath); } - QGraphicsItem::mouseReleaseEvent(event); + QGraphicsPathItem::mouseReleaseEvent(event); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/visualization/vsimplesplinepath.h b/src/app/visualization/vsimplesplinepath.h index eb535ebcc..50fe8ec67 100644 --- a/src/app/visualization/vsimplesplinepath.h +++ b/src/app/visualization/vsimplesplinepath.h @@ -41,6 +41,7 @@ class VSimpleSplinePath : public VAbstractTool, public QGraphicsPathItem Q_OBJECT public: VSimpleSplinePath(VPattern *doc, VContainer *data, quint32 id, qreal *factor); + virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0); protected: virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event );