Tengo una capa con un campo virtual, "LongLabel", una expresión que concatena varios de sus campos de datos. Cuando edito los campos de datos de una característica en la tabla/formulario de atributos de la capa, ¿cómo puedo forzar la actualización del campo virtual para esa característica? Me importa porque "LongLabel" es el campo de selección de características en la parte izquierda del formulario.
No me sorprende que "LongLabel" no se actualice inmediatamente, mientras permanezco en esa característica en la tabla. Pero esperaba que se actualizara después de cambiar a una característica diferente y volver, o cuando guarde mis ediciones y/o recargue la tabla (iconos en la parte superior), o -en el peor de los casos- si activo y desactivo la edición para forzar una confirmación del proveedor de datos. No hay cambios.
Las modificaciones de los campos de datos subyacentes se capturan correctamente, es sólo el campo virtual el que no se recalcula. Después de la edición de datos, si abro un 2do. tabla de atributos (F6 desde el lienzo) muestra correctamente la "LongLabel" actualizada en la segunda tabla pero la no actualizada en la tabla original.
Si no hay forma de hacerlo desde la interfaz de usuario de QGIS, me parece bien una solución de PyQGIS. Un iface.activeLayer().dataProvider().forceReload()
desde la consola de Python no ayuda sin embargo. Un .activeLayer().commitChanges()
seguido de .startEditing()
activa y desactiva la edición, lo que se refleja en el icono de edición de la tabla attr, pero sigue sin actualizar el campo. También puedo encontrar el widget de la tabla de atributos buscando 'QgsAttributeTableDialog/'+iface.activeLayer().id()
en [x.objectName() for x in QApplication.instance().allWidgets()]
pero no puedo averiguar cómo forzarlo a hacer otra cosa que no sea .close()
una vez que lo haya localizado.
Editado para añadir: He ido a reemplazar "LongLabel"
con su definición de expresión en la propiedad de nombre de visualización de la capa. En este caso, el selector de características LHS (que solía ser "LongLabel") se actualiza correctamente cuando me alejo de la característica editada. Sin embargo, "LongLabel" como campo en el formulario de atributos sigue sin actualizarse. Así que está relacionado específicamente con los campos virtuales. Utilizando QGis 3.10.0.