Answers:
从QGIS 2.18开始,转到图层属性/字段属性,并将表达式(@project_filename
在这种情况下)设置为默认值。
您可以定义一个将项目文件名添加为属性的函数,并将该函数与添加功能的事件连接。您可以使用以下代码,将字段的名称更改为您选择的任何名称(我使用过Name
),然后将其粘贴到Python Console中。现在,无论何时添加新功能,都将使用当前项目名称填充该字段:
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)
featureAdded
触发SIGNAL时,您作为参数获得的实际上是功能ID。这就是您打电话所需要的changeAttributeValue
。进入update
函数,您只需要两行(使用变量名):idx = layer.fieldNameIndex('Name')
和layer.changeAttributeValue(featureAdded, idx, project_name)
。