[Qgis-developer] QgsRubberBand RuntimeError: underlying C/C++ object has been deleted
Martin Dobias
wonder.sk at gmail.com
Wed Feb 12 05:50:46 PST 2014
Hi Radim
On Wed, Feb 12, 2014 at 8:03 PM, Radim Blazek <radim.blazek at gmail.com> wrote:
> On Wed, Feb 12, 2014 at 1:45 PM, Radim Blazek <radim.blazek at gmail.com> 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 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
More information about the Qgis-developer
mailing list