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があります。それに代わるPythonはありますか?
シカくん

これを新しい質問として尋ねた場合、喜んで答えます。ここにリマインダーを送ってください;)
マティアスクーン


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プロジェクト内に保存されるマクロとしてスクリプトを保存できます。これを含めるように投稿を編集します=)
ジョセフ

1
ジョセフの機能を選択する必要があるのはなぜですか?
ゲルマンカリージョ

3
重複が多すぎるため、別の質問を投稿する必要はないと思います。あなたは実際に近くにいます。機能の選択を避けることをお勧めします。SIGNAL featureAddedがトリガーされたときにパラメーターとして取得するものは、実際には機能IDです。そして、それはあなたが呼び出すために必要なすべてですchangeAttributeValueupdate機能あなただけ(あなたの変数名を使用して)2行が必要になりますidx = layer.fieldNameIndex('Name')layer.changeAttributeValue(featureAdded, idx, project_name)
ゲルマンカリージョ

1
@GermánCarrillo-うまくいきました、すごい簡単です!あなたの素晴らしい提案仲間に感謝します!私は毎日何かを学ぶ=)
ジョセフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.