在QGIS字段中设置默认值


12

我想在图层的字段中添加默认值。我的意思是,每次创建新功能时,该字段都会自动填充默认值。

在我的情况下,默认值为@project_filename变量(项目的文件名)。

我在任何地方都找不到此功能。

问候,

Answers:


8

从QGIS 2.18开始,转到图层属性/字段属性,并将表达式(@project_filename在这种情况下)设置为默认值。

基于表达式的默认值

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


1
在C ++ API中,如果我没有记错的话,可以使用QgsDefaultValue类以编程方式进行。是否有python替代方法?
shika-kun

如果您是一个新问题,我很乐意回答。请给我一个提醒;)
Matthias Kuhn


10

您可以定义一个将项目文件名添加为属性的函数,并将该函数与添加功能的事件连接。您可以使用以下代码,将字段的名称更改为您选择的任何名称(我使用过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)

结果


1
每当您编辑图层或脚本仍存储在qgis项目中时,是否需要运行脚本?
维尔

1
@Vale-您可以将脚本另存为,该将存储在QGIS项目中。我将编辑该帖子以包括此=)
约瑟夫(Joseph

1
为什么需要选择约瑟夫特征?
赫尔曼·卡里略

3
我认为没有必要再提出其他问题,因为会有太多的重叠之处。你真的很亲密 我建议您避免选择功能。featureAdded触发SIGNAL时,您作为参数获得的实际上是功能ID。这就是您打电话所需要的changeAttributeValue。进入update函数,您只需要两行(使用变量名):idx = layer.fieldNameIndex('Name')layer.changeAttributeValue(featureAdded, idx, project_name)
赫尔曼·卡里略

1
@GermánCarrillo-可行,哇,真简单!谢谢您的好建议!我每天都学到一些东西=)
约瑟夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.