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

Giulio Fattori giulio.fattori a tin.it
Lun 20 Giu 2022 22:23:09 PDT


Il 19/06/2022 12:28, Andrea Giudiceandrea ha scritto:
> Ciao Giulio,
> sei riuscito a risolvere il problema apportando le modifiche suggerite?
>
> A presto.
>
> Andrea
>
> Il 14/06/2022 17:31, Andrea Giudiceandrea ha scritto:
>> 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.
>>>
>
Ciao Andrea,

mi scuso del ritardo nel risponderti ma ero in ferie e per qualche 
giorno niente pc.

La tua soluzione, come sempre, ha risolto efficacemente il problema e 
Toto ne ha fatto un post.

https://github.com/Korto19/Edit-Legend-Text-Categorized

L'algoritmo ha ancora qualche problema con layer filtrati ma per ora non 
ho avuto modo di capire come risolvere.

Grazie ancora e a presto

Giulio
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20220621/f3610e49/attachment.htm>


Maggiori informazioni sulla lista QGIS-it-user