Establecer un valor predeterminado en un campo QGIS

12

Me gustaría agregar en el campo de una capa un valor predeterminado. Quiero decir, cada vez que se crea una nueva característica, ese campo se rellena automáticamente con el valor predeterminado.

En mi caso, el valor predeterminado sería la variable @project_filename (nombre del archivo del proyecto).

No puedo encontrar esta funcionalidad en ningún lado.

Saludos,

Egidi
fuente

Respuestas:

8

Desde QGIS 2.18, vaya a las propiedades de capa / propiedades de campo y establezca una expresión ( @project_filenameen este caso) como el valor predeterminado.

Valores predeterminados basados ​​en expresiones

https://www.qgis.org/en/site/forusers/visualchangelog218/index.html#feature-client-side-default-field-values

Matthias Kuhn
fuente
1
En la API de C ++, si no me equivoco, existe la clase QgsDefaultValue para hacerlo mediante programación. ¿Hay una alternativa a Python para eso?
shika-kun
Si hace esto como una nueva pregunta, me complacerá responderla. Solo envíeme un recordatorio aquí;)
Matthias Kuhn
10

Puede definir una función que agregue el nombre de archivo del proyecto como un atributo y conectar esta función con el evento que agrega características. Puede usar el siguiente código, cambiar el nombre del campo a lo que elija (lo usé Name) y pegarlo en la Consola Python . Ahora, cada vez que agregue una nueva función, el campo se completará con el nombre del proyecto actual:

import os

# Get project name
project = QgsProject.instance()
project_name = os.path.basename(project.fileName())

# Set active layer
layer = qgis.utils.iface.activeLayer()

# Define function to select added feature and add attribute to field "Name"
def update(featureAdded):
    idx = layer.fieldNameIndex('Name')
    layer.changeAttributeValue(featureAdded, idx, project_name)

# Connect "featureAdded" event to "select" function
layer.featureAdded.connect(update)

Resultado

José
fuente
1
¿Necesita ejecutar el script cada vez que edita la capa o el script permanece almacenado en el proyecto qgis?
Vale
1
@Vale: puede guardar el script como una macro que se almacenará dentro del proyecto QGIS. Editaré la publicación para incluir esto =)
Joseph
1
¿Por qué necesita seleccionar características Joseph?
Germán Carrillo
3
No creo que sea necesario publicar otra pregunta, ya que habría demasiada superposición. Estás realmente cerca. Te sugiero que evites seleccionar funciones. Lo que obtienes como parámetro cuando featureAddedse activa la SEÑAL es en realidad una identificación de característica. Y eso es todo lo que necesitas para llamar changeAttributeValue. En la updatefunción solo necesitarías 2 líneas (usando tus nombres de variables): idx = layer.fieldNameIndex('Name')y layer.changeAttributeValue(featureAdded, idx, project_name).
Germán Carrillo
1
@ GermánCarrillo - Eso funcionó, ¡qué simple! Gracias por tu gran sugerencia amigo! Aprendo algo todos los días =)
Joseph