[QGIS-it-user] Modificare la legenda di un layer categorizzato

Andrea Giudiceandrea andreaerdna a libero.it
Mar 14 Giu 2022 08:31:58 PDT


Ciao Giulio,
prima di tutto la riga 23 (new_renderer = 
QgsCategorizedSymbolRenderer()) mi pare sia superflua. Comunque il 
problema non dipende da questo.

A mio avviso il problema è dovuto al fatto che quando, nel ciclo for, 
assegni la simbologia di una categoria alla variabile new_sym (new_sym = 
category.symbol()), l'ownership di tale oggetto non viene trasferito, 
mentre nella creazione di un nuovo oggetto 
QgsRendererCategory(category.value(), new_sym, 
str(new_label[i])+alt_value) l'ownership della simbologia deve essere 
trasferito alla categoria (come indicato nella documentazione della 
classe QgsRendererCategory [1]).

Questo tentativo di trasferire ad un oggetto l'ownership che non si 
possiede di un altro oggetto creare il crash quando si tenta di accedere 
nuovamente all'oggetto.

Per ovviare a tale problema bisogna creare un clone ("deep copy") del 
simbolo in modo da possederne l'ownership affinché possa essere 
trasferito correttamente all'oggetto QgsRendererCategory.

Quindi penso che il problema possa essere risolto modificando il codice 
in uno dei seguenti due modi:

...
for i, category in enumerate(categories):
new_sym = category.symbol()
new_categories.append(QgsRendererCategory(category.value(), 
new_sym.clone(), str(new_label[i])+alt_value))
...

...
for i, category in enumerate(categories):
new_sym = category.symbol().clone()
new_categories.append(QgsRendererCategory(category.value(), new_sym, 
str(new_label[i])+alt_value))
...


A presto.

Andrea


Il 14/06/2022 13:23, Giulio Fattori ha scritto:
>
> Buongiorno,
>
> Ho realizzato questo script da console per modificare la legenda di un 
> layer categorizzato.
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20220614/fd17feea/attachment-0001.htm>


Maggiori informazioni sulla lista QGIS-it-user