Lecture et sauvegarde de configurations

Il est souvent utile pour une extension de sauvegarder des variables pour éviter à l’utilisateur de saisir à nouveau leur valeur ou de faire une nouvelle sélection à chaque lancement de l’extension.

Ces variables peuvent être sauvegardées et récupérées grâce à Qt et à l’API QGIS. Pour chaque variable, vous devez fournir une clé qui sera utilisée pour y accéder — pour la couleur préférée de l’utilisateur, vous pourriez utiliser la clé “couleur_favorite” ou toute autre chaîne de caractères explicite. Nous vous recommandons d’utiliser une convention pour nommer les clés.

Nous pouvons faire des différences entre différents types de paramètres :

  • Paramètres globaux — ils sont liés à l’utilisateur d’une machine en particulier. QGIS enregistre lui-même un certain nombre de variables globales, par exemple, la taille de la fenêtre principale ou la tolérance d’accrochage par défaut. Cette fonctionnalité est fournie directement par la bibliothèque Qt grâce à la classe QSettings. Par défaut, cette classe enregistre les paramètres dans l’environnement “natif” du système d’exploitation — base de registre (sous Windows), fichier .plist (sous Mac OS X) ou fichier .ini (sous Unix). La documentation QSettings est complète et nous ne présenterons donc qu’un cas simple :

    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)
    

    Le second paramètre de la méthode value() est optionnel et indique la valeur par défaut lorsqu’aucune valeur n’existe pour le paramètre nommé.

  • Paramètres du projet — ils varient suivant les différents projets et sont de fait reliés au fichier de projet. On y trouve par exemple la couleur de fond du canevas de cartes ou le système de référence de coordonnées (SCR) de destination. Un fond blanc est WGS84 peuvent convenir à un projet, un fond jaune et une projection UTM seront plus adaptés à un autre projet. Voici un exemple d’utilisation:

    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]
    

    Comme vous pouvez le constater, la méthode writeEntry() est utilisée pour tous les types de données mais il existe plusieurs méthodes pour lire la valeur du paramètre et la méthode qui correspond doit être utilisée selon le type de données.

  • Paramètres de couche cartographique — ces paramètres sont liés à une instance particulière de couche cartographique au sein d’un projet. Ils ne sont pas connectés à la source de données sous-jacente d’une couche. Si vous créez deux instances de couche à partir d’un fichier Shape, elles ne partagerons pas leurs paramètres. Les paramètres sont stockés dans le fichier de projet de manière à ce que lorsque l’utilisateur ouvre à nouveau le projet, les paramètres liés à la couche sont encore présents. Cette fonctionnalité a été ajoutée à QGIS 1.4. L’API est similaire à celle de la classe QSettings: elle récupère les données et renvoie des instances de la classe QVariant:

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