¿Cómo aplicar los cambios en QSettings de inmediato?

15

Con PyQGIS, puede cambiar varias configuraciones, como poner en negrita los grupos en el Panel de capas (o tabla de contenido):

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

La configuración está escrita y se puede ver desde las opciones o escribiendo:

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

Pero no se aplica. Pensé usar

QSettings().sync()

podría ayudar pero desafortunadamente no. La única forma de que se aplique sería ir a la GUI (Settings > Options ) y luego hacer clic OKo reiniciar QGIS.

¿Hay algún método para hacer esto a través de PyQGIS?


Contexto :

Quiero agregar esto como una macro en un archivo de proyecto para asegurar (con fines estéticos) que solo los nombres de grupo están en negrita y los nombres de capa no. Por lo tanto, sería ideal si los QSettings se aplican cuando el proyecto se ha cargado (la configuración inicial se volvería a aplicar cuando se cerrara el proyecto).

José
fuente
Cuando llama a sync () para confirmar sus cambios, ¿llama al estado ()?
whyzar
@whyzar - Gracias, pero también lo probé y aún no hay cambios.
Joseph
2
Es muy extraño, tal vez un error porque ocurre lo mismo usando QSettings().setValue("/qgis/legendLayersBold", False). Creo que el problema está en esta línea github.com/qgis/QGIS/blob/release-2_18/src/app/…
Fran Raga
1
El método posible es, QgisApp::instance()->legend()->updateLegendItemStyles();pero en una versión futura, probablemente?
Fran Raga
@FranciscoRaga - Gracias por el enlace, parece un error. Estaba pensando en publicar un informe de error, pero con QGIS 3.0 saliendo pronto, esperaré y veré si este problema aún existe en la nueva versión =)
Joseph

Respuestas:

2

Creo que no es posible a menos que escriba una clave con el estado predeterminado en su \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state vistazo aquí .

en realidad, cuando reiniciamos el software, automáticamente lo hace por nosotros.

Comprueba esta solución:

#!/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).

Si no funciona, debe escribir un script para reescribir ese valor de registro.

para hacerlo, debe usar winreg para manipular los valores del registro.

puede ver sus claves de registro a través de regedit.exe si usa Windows.

Espero que esto te ayude...

Afshin Salehi
fuente
Gracias por su respuesta, creo que aún tendría que reiniciar QGIS cuando la macro escriba la clave para que QGIS la lea durante el inicio. Todavía estoy tratando de encontrar un camino :)
Joseph