Comment appliquer immédiatement les modifications dans QSettings?

15

Avec PyQGIS, vous pouvez modifier divers paramètres tels que la mise en gras des groupes dans le panneau Calques (ou la table des matières):

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

Les paramètres sont écrits, ce qui peut être vu à partir des options ou en tapant:

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

Mais cela ne s'applique pas. J'ai pensé utiliser

QSettings().sync()

pourrait aider mais malheureusement pas. La seule façon de l'appliquer serait d'aller à l'interface graphique ( Settings > Options) puis de cliquer OKou de redémarrer QGIS.

Existe-t-il une méthode pour le faire via PyQGIS?


Contexte :

Je souhaite ajouter ceci en tant que macro dans un fichier de projet pour garantir (à des fins esthétiques) que seuls les noms de groupe sont en gras et les noms de calque ne le sont pas. Par conséquent, il serait idéal que les QSettings soient appliqués lorsque le projet a été chargé (les paramètres initiaux seraient réappliqués à la fermeture du projet).

Joseph
la source
Lorsque vous appelez sync () pour valider vos modifications, appelez-vous alors status ()?
whyzar
@whyzar - Merci mais j'ai testé ça aussi et toujours pas de changement.
Joseph
2
C'est tellement étrange, peut-être un bug parce qu'il se produit de la même manière en utilisant QSettings().setValue("/qgis/legendLayersBold", False).Je pense que le problème est dans cette ligne github.com/qgis/QGIS/blob/release-2_18/src/app/…
Fran Raga
1
la méthode possible est QgisApp::instance()->legend()->updateLegendItemStyles();mais dans une future version probablement?
Fran Raga
@FranciscoRaga - Merci pour le lien, cela ressemble à un bug. Je pensais publier un rapport de bogue mais avec QGIS 3.0 qui sortira bientôt, je vais attendre et voir si ce problème existe toujours dans la nouvelle version =)
Joseph

Réponses:

2

Je pense que ce n'est pas possible sauf si vous écrivez une clé avec l'état par défaut dans votre \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state jeter un oeil ici .

en fait, lorsque nous redémarrons le logiciel, il le fait automatiquement pour nous.

vérifiez cette solution:

#!/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 cela ne fonctionne pas, vous devez écrire un script pour réécrire cette valeur de registre.

pour ce faire, vous devez utiliser winreg pour manipuler les valeurs de registre.

vous pouvez afficher vos clés de registre via regedit.exe si vous utilisez Windows.

J'espère que ceci vous aide...

Afshin Salehi
la source
Merci pour votre réponse, je pense que je devrais encore redémarrer QGIS lorsque la clé est écrite par la macro pour que QGIS la lise au démarrage. J'essaie toujours de trouver un moyen :)
Joseph