Читання за збереження настройок

Дуже часто буває необхідно зберегти деякі настройки плаґіна, щоб не змушувати користувача вводити їх знову.

These variables can be saved and retrieved with help of Qt and QGIS API. For each variable, you should pick a key that will be used to access the variable — for user’s favourite color you could use key “favourite_color” or any other meaningful string. It is recommended to give some structure to naming of keys.

Слід розрізняти наступні типи настройок:

  • global settings — they are bound to the user at particular machine. QGIS itself stores a lot of global settings, for example, main window size or default snapping tolerance. This functionality is provided directly by Qt framework by the means of QSettings class. By default, this class stores settings in system’s “native” way of storing settings, that is — registry (on Windows), .plist file (on Mac OS X) or .ini file (on Unix). The QSettings documentation is comprehensive, so we will provide just a simple example

    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)
    

    Другий параметр методу value() необов’язковий та задає значення за замовчанням, на той випадок, якщо отримати значення з тих чи інших причин не вдасться.

  • настройки проекту — різні для кожного проекту, тому вони зберігаються безпосередньо у файлі проекту. Прикладом можуть бути колір фону карти або система координат (CRS — в одному проекті може бути білий фон та WGS84, а в іншому —жовтий фон та проекція UTM. Приклад використання нижче

    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() використовується для всіх типів даних, але для зчитування настройок передбачено окремі методи для кожного типу даних.

  • настройки шару — ці настройки відносяться до окремих шарів карти. Вони не зв’язані з певним джерелом даних, тому якщо з одного shape-файлу створено два шари, вони будуть мати різні настройки. Ці настройки також зберігаються у файлі проекту, тому після відкриття проекту настройки шару будуть відновлені. Цей функціонал було реалізовано в QGIS 1.4. API схоже на API QSettings — для читання та запису використовуються екземпляри QVariant

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