Leitura e Armazenamento de Configurações

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.

Nós podemos diferenciar os diversos tipos de configurações:

  • 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 macOS) 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)
    

    O segundo parâmetro do método value() é opcional e especifica o valor padrão se não for fornecido uma definição do valor prévio para o nome da configuração passada.

  • project settings — variar entre diferentes projetos e, portanto, eles estão conectados com um arquivo de projeto. Cor de fundo de mapa de tela ou destino no sistema de coordenadas de referência (CRS) são exemplos — fundo branco e WGS84 pode ser adequado para um projeto, enquanto fundo amarelo e projeção UTM são melhores para outra. Um exemplo de uso segue

    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]
    

    Como pode ver, o método writeEntry() é usado para todos os tipos de dados, mas em diversos métodos existe para leitura um valor de configuração de retorno, e o correspondente tem de ser selecionado para cada tipo de dado.

  • map layer settings — 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 com a fonte de uma camada de dados subjacente, por isso, se você criar duas instâncias da camada de mapa de um shapefile, eles não vão compartilhar as configurações. As configurações são armazenadas no arquivo de projeto, por isso, se o usuário abre o projeto novamente, as definições relacionadas com a camada vai estar lá novamente. Esta funcionalidade foi adicionada no QGIS v1.4. A API é semelhante à QSettings — leva e retorna instâncias QVariant

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