5 votos

Forzar el recuento de campos virtuales en la tabla de atributos en QGIS

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.

6voto

she_weeds Puntos 126

Todavía no he conseguido que los datos del Campo Virtual se actualicen en la Tabla de Atributos.

Sin embargo, en lugar de utilizar campos virtuales, ¿podría considerar la posibilidad de utilizar "expresiones por defecto" en los atributos? Éstas se actualizan automáticamente en la tabla de atributos a partir de la versión 3.10 (véase registro de cambios ) (Sin embargo, es necesario añadir un campo real, por lo que si no tiene acceso de escritura esto no será una opción - pero viendo que está editando datos de todos modos...)

Para configurarlo, añada "LongLabel" como un campo real, luego ir a Propiedades de la capa > Formulario de atributos > seleccionar LongLabel en Widgets disponibles, e introducir la expresión pertinente en Defaults , comprobando Apply default value on update .

enter image description here

Ahora, cada vez que cambie los campos dependientes, el campo dinámico se actualizará automáticamente, tanto si está en la tabla de atributos como si edita el formulario de características. ¡Muy bueno!

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X