Transfer ownership of renderer to c++ in sip bindings when calling QgsRasterLayer.setRenderer and when passing shader to QgsSingleBandPseudoColorRenderer. Fixes crash experienced when using python bindings and replacing the shader or renderer of a raster.

This commit is contained in:
Tim Sutton 2012-09-12 23:15:45 +02:00
parent 05fb39419d
commit 94c2e1cbb0
3 changed files with 8 additions and 7 deletions

View File

@ -217,7 +217,7 @@ public:
//void setUserDefinedRGBMinimumMaximum( bool theBool ); //removed with raster redesign
/**Set raster renderer. Takes ownership of the renderer object*/
void setRenderer( QgsRasterRenderer* renderer );
void setRenderer( QgsRasterRenderer* renderer /Transfer/ );
QgsRasterRenderer* renderer();
/** \brief Accessor to find out how many standard deviations are being plotted */

View File

@ -124,7 +124,7 @@ class QgsSingleBandPseudoColorRenderer: QgsRasterRenderer
%End
public:
/**Note: takes ownership of QgsRasterShader*/
QgsSingleBandPseudoColorRenderer( QgsRasterDataProvider* provider, int band, QgsRasterShader* shader );
QgsSingleBandPseudoColorRenderer( QgsRasterDataProvider* provider, int band, QgsRasterShader* shader /Transfer/ );
~QgsSingleBandPseudoColorRenderer();
QgsRasterInterface * clone();

View File

@ -140,6 +140,7 @@ class TestQgsRasterLayer(unittest.TestCase):
myPseudoRenderer = QgsSingleBandPseudoColorRenderer(myRasterLayer.dataProvider(), 1, myRasterShader)
myRasterLayer.setRenderer(myPseudoRenderer)
return
######## works first time #############
myRasterShader = QgsRasterShader()