mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-25 00:03:06 -04:00
fix crash when removing layers with highlighed features
This commit is contained in:
parent
8e8019a5d0
commit
c91d470f53
@ -7,17 +7,27 @@ class QgsHighlight : QgsMapCanvasItem
|
|||||||
QgsHighlight( QgsMapCanvas *mapCanvas, QgsGeometry *geom, QgsVectorLayer *layer );
|
QgsHighlight( QgsMapCanvas *mapCanvas, QgsGeometry *geom, QgsVectorLayer *layer );
|
||||||
~QgsHighlight();
|
~QgsHighlight();
|
||||||
|
|
||||||
|
/** Set line/outline to color, polygon fill to color with alpha = 63.
|
||||||
|
* This is legacy function, use setFillColor() after setColor() if different fill color is required. */
|
||||||
void setColor( const QColor & color );
|
void setColor( const QColor & color );
|
||||||
|
|
||||||
|
/** Set polygons fill color.
|
||||||
|
* @note: added in version 2.3 */
|
||||||
void setFillColor( const QColor & fillColor );
|
void setFillColor( const QColor & fillColor );
|
||||||
|
|
||||||
/** Set width. Ignored in feature mode. */
|
/** Set width. Ignored in feature mode. */
|
||||||
void setWidth( int width );
|
void setWidth( int width );
|
||||||
|
|
||||||
|
/** Set line / outline buffer in millimeters.
|
||||||
|
* @note: added in version 2.3 */
|
||||||
void setBuffer( double buffer );
|
void setBuffer( double buffer );
|
||||||
|
|
||||||
|
/** Set minimum line / outline width in millimeters.
|
||||||
|
* @note: added in version 2.3 */
|
||||||
void setMinWidth( double width );
|
void setMinWidth( double width );
|
||||||
|
|
||||||
|
const QgsMapLayer *layer() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void paint( QPainter* p );
|
virtual void paint( QPainter* p );
|
||||||
|
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include <typeinfo>
|
|
||||||
|
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
|
|
||||||
#include "qgsmarkersymbollayerv2.h"
|
#include "qgsmarkersymbollayerv2.h"
|
||||||
@ -134,7 +132,7 @@ void QgsHighlight::setFillColor( const QColor & fillColor )
|
|||||||
QgsFeatureRendererV2 * QgsHighlight::getRenderer( const QgsRenderContext & context, const QColor & color, const QColor & fillColor )
|
QgsFeatureRendererV2 * QgsHighlight::getRenderer( const QgsRenderContext & context, const QColor & color, const QColor & fillColor )
|
||||||
{
|
{
|
||||||
QgsFeatureRendererV2 *renderer = 0;
|
QgsFeatureRendererV2 *renderer = 0;
|
||||||
QgsVectorLayer *layer = vectorLayer();
|
QgsVectorLayer *layer = qobject_cast<QgsVectorLayer*>( mLayer );
|
||||||
if ( layer && layer->rendererV2() )
|
if ( layer && layer->rendererV2() )
|
||||||
{
|
{
|
||||||
renderer = layer->rendererV2()->clone();
|
renderer = layer->rendererV2()->clone();
|
||||||
@ -345,7 +343,9 @@ void QgsHighlight::paint( QPainter* p )
|
|||||||
}
|
}
|
||||||
else if ( mFeature.geometry() )
|
else if ( mFeature.geometry() )
|
||||||
{
|
{
|
||||||
QgsVectorLayer *layer = vectorLayer();
|
QgsVectorLayer *layer = qobject_cast<QgsVectorLayer*>( mLayer );
|
||||||
|
if( !layer )
|
||||||
|
return;
|
||||||
QgsMapSettings mapSettings = mMapCanvas->mapSettings();
|
QgsMapSettings mapSettings = mMapCanvas->mapSettings();
|
||||||
QgsRenderContext context = QgsRenderContext::fromMapSettings( mapSettings );
|
QgsRenderContext context = QgsRenderContext::fromMapSettings( mapSettings );
|
||||||
|
|
||||||
@ -438,9 +438,3 @@ void QgsHighlight::updateRect()
|
|||||||
setRect( QgsRectangle() );
|
setRect( QgsRectangle() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsVectorLayer * QgsHighlight::vectorLayer()
|
|
||||||
{
|
|
||||||
return dynamic_cast<QgsVectorLayer *>( mLayer );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -66,6 +66,8 @@ class GUI_EXPORT QgsHighlight: public QgsMapCanvasItem
|
|||||||
* @note: added in version 2.3 */
|
* @note: added in version 2.3 */
|
||||||
void setMinWidth( double width ) { mMinWidth = width; }
|
void setMinWidth( double width ) { mMinWidth = width; }
|
||||||
|
|
||||||
|
const QgsMapLayer *layer() const { return mLayer; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void paint( QPainter* p );
|
virtual void paint( QPainter* p );
|
||||||
|
|
||||||
@ -82,10 +84,6 @@ class GUI_EXPORT QgsHighlight: public QgsMapCanvasItem
|
|||||||
void paintLine( QPainter *p, QgsPolyline line );
|
void paintLine( QPainter *p, QgsPolyline line );
|
||||||
void paintPolygon( QPainter *p, QgsPolygon polygon );
|
void paintPolygon( QPainter *p, QgsPolygon polygon );
|
||||||
|
|
||||||
QgsVectorLayer *vectorLayer();
|
|
||||||
|
|
||||||
QgsHighlight();
|
|
||||||
|
|
||||||
QBrush mBrush;
|
QBrush mBrush;
|
||||||
QPen mPen;
|
QPen mPen;
|
||||||
QgsGeometry *mGeometry;
|
QgsGeometry *mGeometry;
|
||||||
|
@ -654,6 +654,7 @@ void QgsMapToolIdentify::handleMenuHover()
|
|||||||
hl->setColor( QColor( 255, 0, 0 ) );
|
hl->setColor( QColor( 255, 0, 0 ) );
|
||||||
hl->setWidth( 2 );
|
hl->setWidth( 2 );
|
||||||
mRubberBands.append( hl );
|
mRubberBands.append( hl );
|
||||||
|
connect( vl, SIGNAL( destroyed() ), this, SLOT( layerDestroyed() ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -662,10 +663,22 @@ void QgsMapToolIdentify::handleMenuHover()
|
|||||||
|
|
||||||
void QgsMapToolIdentify::deleteRubberBands()
|
void QgsMapToolIdentify::deleteRubberBands()
|
||||||
{
|
{
|
||||||
QList<QgsHighlight*>::const_iterator it = mRubberBands.constBegin();
|
qDeleteAll( mRubberBands );
|
||||||
for ( ; it != mRubberBands.constEnd(); ++it )
|
}
|
||||||
|
|
||||||
|
void QgsMapToolIdentify::layerDestroyed()
|
||||||
|
{
|
||||||
|
QList<QgsHighlight*>::iterator it = mRubberBands.begin();
|
||||||
|
while ( it != mRubberBands.end() )
|
||||||
|
{
|
||||||
|
if (( *it )->layer() == sender() )
|
||||||
{
|
{
|
||||||
delete *it;
|
delete *it;
|
||||||
|
it = mRubberBands.erase( it );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mRubberBands.clear();
|
|
||||||
}
|
}
|
||||||
|
@ -127,6 +127,7 @@ class GUI_EXPORT QgsMapToolIdentify : public QgsMapTool
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void formatChanged( QgsRasterLayer *layer );
|
void formatChanged( QgsRasterLayer *layer );
|
||||||
|
void layerDestroyed();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void identifyProgress( int, int );
|
void identifyProgress( int, int );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user