Como aplicar alterações no QSettings imediatamente?


15

Com o PyQGIS, você pode alterar várias configurações, como tornar os grupos no painel Camadas (ou índice) em negrito:

from PyQt4.QtCore import QSettings
QSettings().setValue("/Qgis/legendGroupsBold", True)

As configurações são escritas e podem ser vistas nas opções ou na digitação:

QSettings().value("/Qgis/legendGroupsBold")
>>> u'true'

Mas não é aplicado. Eu pensei usando

QSettings().sync()

pode ajudar, mas infelizmente não. A única maneira de aplicar seria acessar a GUI ( Settings > Options) e clicar OKou reiniciar o QGIS.

Existe um método para fazer isso através do PyQGIS?


Contexto :

Quero adicionar isso como uma macro em um arquivo de projeto para garantir (para fins estéticos) que apenas nomes de grupos estejam em negrito e nomes de camadas não. Portanto, seria ideal se as QSettings fossem aplicadas quando o projeto fosse carregado (as configurações iniciais seriam reaplicadas quando o projeto fosse fechado).


Quando você chama sync () para confirmar suas alterações, você chama status ()?
whyzar

@whyzar - Obrigado, mas testei isso também e ainda não há alterações.
Joseph

2
É tão estranho, talvez um bug, porque ocorre o mesmo usando QSettings().setValue("/qgis/legendLayersBold", False). Eu acho que o problema está nesta linha github.com/qgis/QGIS/blob/release-2_18/src/app/…
Fran Raga

1
o método possível é, QgisApp::instance()->legend()->updateLegendItemStyles();mas em uma versão futura, provavelmente?
Fran Raga

@FranciscoRaga - Obrigado pelo link, parece um bug. Eu estava pensando em postar um relatório de bug, mas com o QGIS 3.0 sendo lançado em breve, esperarei e veremos se esse problema ainda existe na nova versão =) #
Joseph Joseph

Respostas:


2

Eu acho que não é possível, a menos que você escreva uma chave com o estado padrão para \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state dar uma olhada aqui .

na verdade, quando reiniciamos o software, ele automaticamente faz isso por nós.

verifique esta solução:

#!/usr/bin/python
from PyQt4.QtCore import QSettings
QSettings( "QGIS", "QGIS2" ).remove( "/UI/state" )
QSettings( "QGIS", "QGIS2" ).remove( "/ComposerUI/state" )


#(for 1.8 it's QGIS instead of QGIS2 IIRC).

se não funcionar, você precisará escrever um script para reescrever esse valor do registro.

Para fazer isso, você precisa usar o winreg para manipular os valores do Registro.

você pode ver suas chaves de registro via regedit.exe se você usa o Windows.

Espero que isso ajude você...


Obrigado pela sua resposta, acho que ainda precisaria reiniciar o QGIS quando a chave for escrita pela macro para que o QGIS o leia durante a inicialização. Ainda estou tentando encontrar uma maneira :) #
Joseph
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.