それは、何回もユーザーがプラグインの実行される次回の日時を入力したり、それらを再度選択する必要がないように、いくつかの変数を保存するためのプラグインのために便利です。
これらの変数は保存され、QtとQGIS APIの助けを借りて取得できます。各変数について、変数にアクセスするために使用されるキーを選択する必要があります—ユーザの好みの色のためにキー「favourite_color」またはその他の意味のある文字列を使用できます。キーの名前をつけるときは何らかの構造を持たせることをお勧めします。
我々は、異なる種類の設定をすることができます:
グローバル設定は —彼らは、特定のマシンのユーザにバインドされています。QGIS自体がグローバル設定の多くを保存し、例えば、メインウィンドウのサイズまたはデフォルトでは許容範囲をスナップ。クラス:: QSettings`クラスこの機能は、によってQtフレームワークによって直接提供されます。デフォルトでは、(Mac OS Xの)(Windowsの場合)—レジストリ、の.plistファイルまたは(Unix上).iniファイルで保存する設定のシステムの「ネイティブ」な方法でこのクラスを格納設定。`QSettingsのドキュメント<http://doc.qt.io/qt-4.8/qsettings.html> _包括的であるので、我々は単純な例を提供します
def store():
s = QSettings()
s.setValue("myplugin/mytext", "hello world")
s.setValue("myplugin/myint", 10)
s.setValue("myplugin/myreal", 3.14)
def read():
s = QSettings()
mytext = s.value("myplugin/mytext", "default text")
myint = s.value("myplugin/myint", 123)
myreal = s.value("myplugin/myreal", 2.71)
The second parameter of the value() method is optional and specifies the default value if there is no previous value set for the passed setting name.
プロジェクト設定 —異なるプロジェクト間で変動し、したがって、それらは、プロジェクトファイルに接続されています。地図キャンバスの背景色または先座標参照系(CRS)の例である黄色の背景とUTMの突起が別のもののために優れていながら—白背景とWGS84は、一つのプロジェクトに適しているかもしれません。使い方の例は次のとおり
proj = QgsProject.instance()
# store values
proj.writeEntry("myplugin", "mytext", "hello world")
proj.writeEntry("myplugin", "myint", 10)
proj.writeEntry("myplugin", "mydouble", 0.01)
proj.writeEntry("myplugin", "mybool", True)
# read values
mytext = proj.readEntry("myplugin", "mytext", "default text")[0]
myint = proj.readNumEntry("myplugin", "myint", 123)[0]
ご覧の通り writeEntry() メソッドがすべてのデータ型のために使われますが、いくつかのメソッドが後ろに設定値を読み込むために存在し、対応するものは各々のデータ型のために選ばなければなりません。
マップレイヤの設定 —これらの設定は、プロジェクトでのマップレイヤの特定のインスタンスに関連しています。彼らは、* *層の基礎となるデータソースに接続されていないので、あなたは1つのシェープファイルの2つのマップレイヤのインスタンスを作成した場合、彼らは設定を共有することはありません。設定はプロジェクトファイルに保存されているので、ユーザは、プロジェクトを再度開いた場合、層関連の設定が再び存在します。この機能は、QGIS v1.4以降に追加されました。APIは、それが取る— QSettingsに似ており、QVariantインスタンスを返します。
# save a value
layer.setCustomProperty("mytext", "hello world")
# read the value again
mytext = layer.customProperty("mytext", "default text")