QGIS 필드에서 기본값 설정


12

레이어의 필드에 기본값을 추가하고 싶습니다. 새 기능을 만들 때마다 해당 필드가 자동으로 기본값으로 채워집니다.

필자의 경우 기본값은 @project_filename 변수 (프로젝트 파일 이름)입니다.

이 기능을 어디서나 찾을 수 없습니다.

문안 인사,

답변:


8

QGIS 2.18부터는 레이어 속성 / 필드 속성으로 이동하여 표현식 ( @project_filename이 경우)을 기본값으로 설정하십시오.

표현식 기반 기본값

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


1
C ++ API에서 실수하지 않으면 프로그래밍 방식으로 수행 할 클래스 QgsDefaultValue가 있습니다. 그 대신 파이썬 대안이 있습니까?
shika-kun

이 질문을 새로운 질문으로하면 기꺼이 답변 해 드리겠습니다. 그냥 여기 나에게 알림을 보낼 수)
마티아스 쿤


10

프로젝트 파일 이름을 속성으로 추가하는 기능을 정의하고이 기능을 기능을 추가하는 이벤트와 연결할 수 있습니다. 다음 코드를 사용하여 필드 이름을 원하는대로 변경하고 (사용한 Name) Python 콘솔에 붙여 넣을 수 있습니다. 이제 새로운 기능을 추가 할 때마다 필드가 현재 프로젝트 이름으로 채워집니다.

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 프로젝트에 저장된 상태로 유지됩니까?
Vale

1
@Vale- QGIS 프로젝트 내에 저장 될 매크로 로 스크립트를 저장할 수 있습니다 . 이 내용을 포함하도록 게시물을 편집하겠습니다. =)
Joseph

1
왜 Joseph 기능을 선택해야합니까?
Germán Carrillo

3
중복이 너무 많아서 다른 질문을 게시해야 할 필요는 없다고 생각합니다. 당신은 실제로 가깝습니다. 기능을 선택하지 않는 것이 좋습니다. SIGNAL featureAdded이 트리거 될 때 매개 변수로 얻는 것은 실제로 피처 ID입니다. 그리고 이것이 당신이 전화하는 데 필요한 전부 changeAttributeValue입니다. 로 update기능 당신은을 (당신의 변수 이름을 사용) 2 개 라인을 필요 : idx = layer.fieldNameIndex('Name')layer.changeAttributeValue(featureAdded, idx, project_name).
Germán Carrillo

1
@ GermánCarrillo-효과가있었습니다. 당신의 위대한 제안 친구에게 감사합니다! 나는 매일 무언가를 배운다 =)
Joseph Joseph
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.