[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