12. Leitura e Armazenamento de Configurações

Dica

Os trechos de código desta página precisam das seguintes importações se você estiver fora do console do pyqgis:

1from qgis.core import (
2  QgsProject,
3  QgsSettings,
4  QgsVectorLayer
5)

Muitas vezes é útil para o plugin salvar algumas variáveis para que o utilizador não necessite introduzir ou selecionar outra vez numa próxima vez que o plugin for acionado.

Estas variáveis podem ser salvas e recuperadas com a ajuda do Qt e QGIS API. Para cada variável, você deve pegar a chave que será usada para acessar a variável — para cor favorita do usuário use a chave “favourite_color” ou alguma outra palavra com significado. É recomendado dar alguma estrutura para criação do nome das chaves.

Podemos diferenciar entre vários tipos de configurações:

  • configurações globais — estão vinculadas ao usuário em uma máquina específica. O próprio QGIS armazena muitas configurações globais, por exemplo, tamanho da janela principal ou tolerância de snap padrão. As configurações são tratadas usando a classe QgsSettings, por exemplo, através dos métodos setValue() e value().

    Aqui você pode ver um exemplo de como esses métodos são usados.

     1def store():
     2  s = QgsSettings()
     3  s.setValue("myplugin/mytext", "hello world")
     4  s.setValue("myplugin/myint",  10)
     5  s.setValue("myplugin/myreal", 3.14)
     6
     7def read():
     8  s = QgsSettings()
     9  mytext = s.value("myplugin/mytext", "default text")
    10  myint  = s.value("myplugin/myint", 123)
    11  myreal = s.value("myplugin/myreal", 2.71)
    12  nonexistent = s.value("myplugin/nonexistent", None)
    13  print(mytext)
    14  print(myint)
    15  print(myreal)
    16  print(nonexistent)
    

    O segundo parâmetro do método value () é opcional e especifica o valor padrão retornado se não houver um valor anterior definido para o nome da configuração transmitida.

    Para um método para pré-configurar os valores padrão das configurações globais através do arquivo global_settings.ini, veja Deploying QGIS within an organization para mais detalhes.

  • configurações do projeto — variam entre projetos diferentes e, portanto, estão conectados a um arquivo de projeto. A cor de fundo da tela de mapa ou o sistema de referência de coordenadas de destino (SRC) são exemplos — fundo branco e WGS84 podem ser adequados para um projeto, enquanto fundo amarelo e projeção UTM são melhores para outro.

    Um exemplo de uso a seguir.

     1proj = QgsProject.instance()
     2
     3# store values
     4proj.writeEntry("myplugin", "mytext", "hello world")
     5proj.writeEntry("myplugin", "myint", 10)
     6proj.writeEntryDouble("myplugin", "mydouble", 0.01)
     7proj.writeEntryBool("myplugin", "mybool", True)
     8
     9# read values (returns a tuple with the value, and a status boolean
    10# which communicates whether the value retrieved could be converted to
    11# its type, in these cases a string, an integer, a double and a boolean
    12# respectively)
    13
    14mytext, type_conversion_ok = proj.readEntry("myplugin",
    15                                            "mytext",
    16                                            "default text")
    17myint, type_conversion_ok = proj.readNumEntry("myplugin",
    18                                              "myint",
    19                                              123)
    20mydouble, type_conversion_ok = proj.readDoubleEntry("myplugin",
    21                                                    "mydouble",
    22                                                    123)
    23mybool, type_conversion_ok = proj.readBoolEntry("myplugin",
    24                                                "mybool",
    25                                                123)
    

    As you can see, the writeEntry() method is used for many data types (integer, string, list), but several methods exist for reading the setting value back, and the corresponding one has to be selected for each data type.

  • configurações da camada de mapa — essas configurações estão relacionadas a uma instância específica de uma camada de mapa com um projeto. Eles não estão conectados à fonte de dados subjacente de uma camada; portanto, se você criar duas instâncias da camada de mapa de um shapefile, elas não compartilharão as configurações. As configurações são armazenadas dentro do arquivo do projeto; portanto, se o usuário abrir o projeto novamente, as configurações relacionadas à camada estarão lá novamente. O valor para uma determinada configuração é recuperado usando o método customProperty() e pode ser definido usando o método setCustomProperty().

    1vlayer = QgsVectorLayer()
    2# save a value
    3vlayer.setCustomProperty("mytext", "hello world")
    4
    5# read the value again (returning "default text" if not found)
    6mytext = vlayer.customProperty("mytext", "default text")