On Wed, Feb 12, 2014 at 2:50 PM, Martin Dobias <[email protected]> wrote: > Hi Radim > > On Wed, Feb 12, 2014 at 8:03 PM, Radim Blazek <[email protected]> wrote: >> On Wed, Feb 12, 2014 at 1:45 PM, Radim Blazek <[email protected]> wrote: >>> I am using rubber band in Python plugin: >>> self.rb = QgsRubberBand(self.canvas, QGis.Polygon) >>> and on mouse move >>> self.rb.addPoint( point, update ) >>> >>> It works well on most systems only for Win7/32bit (QGIS 2.0.1, Python >>> 2.7.4) it was reported that it fails with "RuntimeError: underlying >>> C/C++ object has been deleted" > > When does it report the error - when closing QGIS?
I don't know but I presume when map tool is used, it is called from QgsMapTool::canvasMoveEvent(). Radim >>> I see that ownership of rubber band is passed to map canvas >>> >>> QgsRubberBand( QgsMapCanvas* mapCanvas /TransferThis/, >>> QGis::GeometryType geometryType = QGis::Line ); >>> >>> that is OK, but QgsMapCanvas should not delete QGraphicsItem until it >>> is destructed. >>> >>> So how can the QgsRubberBand be deleted before QGIS is closed? >> >> BTW, because true owner of QGraphicsItem is QGraphicsScene, should not >> we first mScene->removeItem() (which returns ownership) before item is >> deleted in QgsMapCanvas destructor? > > That's the correct approach in Python (IIRC). You can remove the item > in your map tool's deactivate() method. > > Regards > Martin _______________________________________________ Qgis-developer mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/qgis-developer
