Instellingen lezen en opslaan

Vaak is het voor een plug-in nuttig om enkele variabelen op te slaan zodat de gebruiker ze niet opnieuw hoeft in te voeren of te selecteren als de plug-in een volgende keer wordt uitgevoerd.

Deze variabelen kunnen worden opgeslagen en weer worden opgehaald met de hulp van Qt en de API van QGIS. Voor elke variabele zou u een sleutel moeten kiezen die kan worden gebruikt om toegang te verkrijgen tot de variabele — voor de favoriete kleur van de gebruiker zou u de sleutel “favourite_color” kunnen gebruiken of elke andere tekenreeks met betekenis. Het wordt aanbevolen enige structuur aan te brengen in het benoemen van sleutels.

We kunnen onderscheid maken tussen de verscheidene typen instellingen:

  • globale instellingen — zij zijn gebonden aan de gebruiker op een bepaalde machine. QGIS slaat zelf heel veel globale instellingen op, bijvoorbeeld, de grootte van het hoofdvenster of de standaard tolerantie voor snappen. Deze functionaliteit wordt direct verschaft door het framework Qt door middel van de klasse QSettings . Standaard slaat deze klasse instellingen op in de “eigen” manier van het systeem voor het opslaan van instellingen, dat is — registry (op Windows), bestand .plist (op Mac OS X) of bestand .ini (op Unix). De QSettings documentation is zeer uitgebreid, dus zullen we slechts een eenvoudig voorbeeld geven

    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)
    

    De tweede parameter van de methode value() is optioneel en specificeert de standaard waarde als er geen eerdere waarde is ingesteld voor de doorgegeven naam van de instelling.

  • projectinstellingen — variëren tussen de verschillende projecten en daarom zijn ze gebonden aan een projectbestand. De kleur van de achtergrond van het kaartvenster of het doel coördinaten referentiesysteem (CRS) zijn daar voorbeelden van — een witte achtergrond en WGS84 zouden misschien geschikt zijn voor het ene project, terwijl ene gele achtergrond en de projectie UTM beter geschikt zijn voor een ander. Een voorbeeld van het gebruik volgt

    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]
    

    Zoals u kunt zien wordt de methode writeEntry() gebruikt voor alle gegevenstypen, mer er bestaan verscheidene methoden om de waarde van de instelling terug in te lezen, en de corresponderende moet worden geselecteerd voor elk gegevenstype.

  • instellingen voor kaartlagen — deze instellingen zijn gerelateerd aan een bepaalde instance van een kaartlaag in een project. Zij zijn niet verbonden met de onderliggende gegevensbron van een laag, dus als u twee instances voor kaartlagen maakt uit één shapefile, zullen zij de instellingen niet delen. De instellingen worden opgeslagen in een projectbestand, dus als de gebruiker het project opnieuw opent, zijn de aan de laag gerelateerde instellingen weer aanwezig. Deze functionaliteit is toegevoegd in QGIS v1.4. De API is soortgelijk aan QSettings — het ontvangt en geeft instances van QVariant terug

    # save a value
    layer.setCustomProperty("mytext", "hello world")
    
    # read the value again
    mytext = layer.customProperty("mytext", "default text")