[Qgis-developer] PyQGIS: Problems with the layerWasAdded SIGNAL
Germán Carrillo
carrillo.german at gmail.com
Mon Jun 15 21:55:15 EDT 2009
Hi Martin.
I create the layers like the PyQGIS Wiki says:
( For shapefiles) layer = QgsVectorLayer( layerPath, layerInfo.fileName(),
layerProvider )
Where layerPath is a QFileDialog result and layerProvider is "ogr".
If the layer is valid, I call a function to add it to canvas:
if layer.isValid():
self.agregarCapa( layer )
def agregarCapa( self, capa ):
QgsMapLayerRegistry.instance().addMapLayer( capa )
self.layers.insert( 0, QgsMapCanvasLayer( capa ) )
self.canvas.setLayerSet( self.layers )
I remove layers from the Legend class:
for i in self.layers:
if i.layer().getLayerID() == self.currentItem().layerId:
self.layers.remove( i )
QgsMapLayerRegistry.instance().removeMapLayer(
i.layer().getLayerID() )
self.canvas.setLayerSet( self.layers )
break
Then I remove the QTreeWidgetItem:
self.takeTopLevelItem( self.indexOfTopLevelItem( myItem ) )
Like in the QGIS legend, I have an item for the layer name and its geometry
type and a child item for its symbology.
The parent item (the layer item) has the attribute canvasLayer to reference
it and access its functions and attributes.
I'm using this connect line:
self.connect( QgsMapLayerRegistry.instance(),
SIGNAL("layerWasAdded(QgsMapLayer *)"), self.legend.addLayerToLegend )
The legend has another connect line to update the layer status:
self.connect( self, SIGNAL("itemChanged(QTreeWidgetItem *,int)"),
self.updateLayerStatus )
When all it's ok, remove layer always returns two lines like this:
Object::disconnect: Unexpected null parameter
Thanks by your help.
Germán.
El 14 de junio de 2009 5:22, Martin Dobias <wonder.sk at gmail.com> escribió:
> 2009/6/11 Germán Carrillo <carrillo.german at gmail.com>:
> > Hi.
> >
> > I'm using PyQGIS. I have three classes in my app: Viewer, Legend and
> Load.
> > The Viewer class is the main one, the Load class add some data to canvas.
> > The Legend class has a SLOT to capture the layerWasAdded SIGNAL from the
> > QgsMapLayerRegistry class and when it happens add an item in a
> QTreeWidget.
> >
> > The Legend class can remove layers. So, I have a problem with the SIGNAL
> > layerWasAdded. When I remove a layer I get multiple lines like this:
> >
> > Object::disconnect: Unexpected null parameter
> >
> > After that, if I add the same layer again I get a segmentation fault that
> > crashes my app.
> >
> > This happen even if I use a custom SIGNAL passing the layer object as
> > parameter from my Load class.
>
> Hi German,
>
> some code from your app would be helpful. How do you create instances
> of the layer classes? How do you delete the layers?
>
> Martin
>
--
-----------
|\__
(:>__)(
|/
Soluciones Geoinformáticas Libres
http://geotux.tuxfamily.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/qgis-developer/attachments/20090615/4db321c8/attachment.html
More information about the Qgis-developer
mailing list