mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
do not hold a pointer to an QGraphicsItem within a QGraphicsItem
since map canvas is deleting them all, this is causing a crash when trying to delete the already deleted item in the parent item
This commit is contained in:
parent
9c76524da7
commit
6dfe113d67
@ -10,6 +10,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
class QgsAdvancedDigitizingCanvasItem : QgsMapCanvasItem
|
||||
{
|
||||
%Docstring
|
||||
@ -25,8 +26,6 @@ The QgsAdvancedDigitizingCanvasItem class draws the graphical elements of the CA
|
||||
virtual void paint( QPainter *painter );
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
};
|
||||
|
||||
/************************************************************************
|
||||
|
@ -28,7 +28,6 @@ QgsAdvancedDigitizingCanvasItem::QgsAdvancedDigitizingCanvasItem( QgsMapCanvas *
|
||||
, mSnapPen( QPen( QColor( 127, 0, 0, 150 ), 1 ) )
|
||||
, mSnapLinePen( QPen( QColor( 127, 0, 0, 150 ), 1, Qt::DashLine ) )
|
||||
, mCursorPen( QPen( QColor( 127, 127, 127, 255 ), 1 ) )
|
||||
, mSnapIndicator( qgis::make_unique< QgsSnapIndicator>( canvas ) )
|
||||
, mAdvancedDigitizingDockWidget( cadDockWidget )
|
||||
{
|
||||
}
|
||||
@ -253,15 +252,4 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
|
||||
painter->drawLine( curPointPix + QPointF( -5, +5 ),
|
||||
curPointPix + QPointF( +5, -5 ) );
|
||||
}
|
||||
|
||||
|
||||
QgsPointLocator::Match match = mAdvancedDigitizingDockWidget->mapPointMatch();
|
||||
if ( match.isValid() )
|
||||
{
|
||||
mSnapIndicator->setMatch( match );
|
||||
mSnapIndicator->setVisible( true );
|
||||
}
|
||||
else
|
||||
mSnapIndicator->setVisible( false );
|
||||
|
||||
}
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
#include "qgsmapcanvasitem.h"
|
||||
#include "qgis_gui.h"
|
||||
#include "qgssnapindicator.h"
|
||||
|
||||
|
||||
class QgsAdvancedDigitizingDockWidget;
|
||||
|
||||
@ -35,17 +35,13 @@ class GUI_EXPORT QgsAdvancedDigitizingCanvasItem : public QgsMapCanvasItem
|
||||
|
||||
void paint( QPainter *painter ) override;
|
||||
|
||||
protected:
|
||||
private:
|
||||
QPen mLockedPen;
|
||||
QPen mConstruction1Pen;
|
||||
QPen mConstruction2Pen;
|
||||
QPen mSnapPen;
|
||||
QPen mSnapLinePen;
|
||||
QPen mCursorPen;
|
||||
//! Snapping indicators
|
||||
std::unique_ptr<QgsSnapIndicator> mSnapIndicator;
|
||||
|
||||
private:
|
||||
QgsAdvancedDigitizingDockWidget *mAdvancedDigitizingDockWidget = nullptr;
|
||||
};
|
||||
|
||||
|
@ -42,6 +42,7 @@
|
||||
QgsAdvancedDigitizingDockWidget::QgsAdvancedDigitizingDockWidget( QgsMapCanvas *canvas, QWidget *parent )
|
||||
: QgsDockWidget( parent )
|
||||
, mMapCanvas( canvas )
|
||||
, mSnapIndicator( qgis::make_unique< QgsSnapIndicator>( canvas ) )
|
||||
, mCommonAngleConstraint( QgsSettings().value( QStringLiteral( "/Cad/CommonAngle" ), 90 ).toDouble() )
|
||||
{
|
||||
setupUi( this );
|
||||
@ -670,6 +671,17 @@ bool QgsAdvancedDigitizingDockWidget::applyConstraints( QgsMapMouseEvent *e )
|
||||
e->setMapPoint( point );
|
||||
|
||||
mSnapMatch = context.snappingUtils->snapToMap( point );
|
||||
|
||||
if ( mSnapMatch.isValid() )
|
||||
{
|
||||
mSnapIndicator->setMatch( mSnapMatch );
|
||||
mSnapIndicator->setVisible( true );
|
||||
}
|
||||
else
|
||||
{
|
||||
mSnapIndicator->setVisible( false );
|
||||
}
|
||||
|
||||
/*
|
||||
* Constraints are applied in 2D, they are always called when using the tool
|
||||
* but they do not take into account if when you snap on a vertex it has
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "qgsmessagebaritem.h"
|
||||
#include "qgspointxy.h"
|
||||
#include "qgspointlocator.h"
|
||||
#include "qgssnapindicator.h"
|
||||
|
||||
|
||||
class QgsAdvancedDigitizingCanvasItem;
|
||||
@ -702,6 +703,8 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private
|
||||
|
||||
QgsMapCanvas *mMapCanvas = nullptr;
|
||||
QgsAdvancedDigitizingCanvasItem *mCadPaintItem = nullptr;
|
||||
//! Snapping indicator
|
||||
std::unique_ptr<QgsSnapIndicator> mSnapIndicator;
|
||||
|
||||
CadCapacities mCapacities = nullptr;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user