Molte volte è utile per un plugin salvare alcune variabili in modo tale che l’utente non debba inserirle o selezionarle di nuovo la volta successiva che il plugin è eseguito.
Questa variabili possono essere salvate e recuperate con l’aiuto delle API di Qt e QGIS. Per ogni variabile, dovresti scegliere una chiave che sarà usata per accedere alla variabile — per il colore preferito dell’utente potresti usare la chiave “favourite_color” o una qualunque altra stringa significativa. È raccomandabile dare una qualche struttura alla denominazione delle chiavi.
Possiamo fare una differenza tra diversi tipi di impostazioni:
impostazioni globali — sono legate all’utente per una specifica macchina. QGIS stesso memorizza un sacco di impostazioni globali, per esempio, la dimensione della finestra principale o la tolleranza predefinita di aggancio. Questa funzionalità è fornita direttamente dall’ambiente Qt per mezzo della classe QSettings. Per impostazione predefinita, questa classe memorizza le impostazioni nella maniera “nativa” del sistema di memorizzare le impostazioni, che è — il registro (su Windows), il file .plist (su Mac OS X) o il file .ini (su Unix). La documentazione di QSettings è completa, per cui forniremo solo un semplice esempio
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)
Il secondo parametro del metodo value() è opzionale e specifica il valore predefinito se non c’è nessun altro valore precedentemente impostato per il nome di impostazione passato.
impostazioni di progetto — variano da progetto a progetto e inoltre sono collegate a un file di progetto. Il colore di sfondo della mappa o il sistema di riferimento delle coordinate (CRS) di destinazione ne sono un esempio — lo sfondo bianco e il WGS84 possono essere adatti per un progetto, mentre lo sfondo giallo e la proiezione UTM lo sono per un altro. Segue un esempio
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]
As you can see, the writeEntry() method is used for all data types, but several methods exist for reading the setting value back, and the corresponding one has to be selected for each data type.
map layer settings — these settings are related to a particular instance of a map layer with a project. They are not connected with underlying data source of a layer, so if you create two map layer instances of one shapefile, they will not share the settings. The settings are stored in project file, so if the user opens the project again, the layer-related settings will be there again. This functionality has been added in QGIS v1.4. The API is similar to QSettings — it takes and returns QVariant instances
# save a value
layer.setCustomProperty("mytext", "hello world")
# read the value again
mytext = layer.customProperty("mytext", "default text")