Wie werden Änderungen in QSettings sofort übernommen?

15

Mit PyQGIS können Sie verschiedene Einstellungen ändern, z. B. die Gruppen im Ebenenbedienfeld (oder im Inhaltsverzeichnis) fett formatieren:

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

Es werden die Einstellungen geschrieben, die aus den Optionen oder der Eingabe hervorgehen:

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

Aber es wird nicht angewendet. Ich dachte mit

QSettings().sync()

könnte aber leider nicht helfen. Die einzige Möglichkeit für die Anwendung wäre, entweder zur GUI zu gehen ( Settings > Options) und dann auf zu klicken OKoder QGIS neu zu starten.

Gibt es eine Methode, um dies über PyQGIS zu tun?


Kontext :

Ich möchte dies als Makro in eine Projektdatei einfügen, um (aus ästhetischen Gründen) sicherzustellen, dass nur Gruppennamen fett gedruckt werden und Ebenennamen nicht. Daher ist es ideal, wenn die QSettings angewendet werden, wenn das Projekt geladen wurde (die anfänglichen Einstellungen werden erneut angewendet, wenn das Projekt geschlossen wird).

Joseph
quelle
Wenn Sie sync () aufrufen, um Ihre Änderungen zu übernehmen, rufen Sie dann status () auf?
Whyzar
@whyzar - Danke aber auch getestet und trotzdem keine Änderung.
Joseph
2
Es ist so seltsam, vielleicht ein Fehler , weil das gleiche geschieht mit QSettings().setValue("/qgis/legendLayersBold", False).Ich denkt , dass das Problem in dieser Linie ist github.com/qgis/QGIS/blob/release-2_18/src/app/...
Fran Raga
1
die mögliche methode ist QgisApp::instance()->legend()->updateLegendItemStyles();aber in einer zukünftigen version wohl?
Fran Raga
@FranciscoRaga - Danke für den Link, es scheint ein Fehler zu sein. Ich habe überlegt, einen Fehlerbericht zu veröffentlichen, aber da QGIS 3.0 bald veröffentlicht wird, werde ich abwarten, ob dieses Problem in der neuen Version noch besteht =)
Joseph

Antworten:

2

Ich denke, es ist nicht möglich, es sei denn, Sie schreiben einen Schlüssel mit dem Standardstatus in Ihren \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state Blick hier .

Wenn wir die Software neu starten, wird dies automatisch für uns erledigt.

überprüfe diese Lösung:

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

Wenn dies nicht funktioniert, müssen Sie ein Skript schreiben, um diesen Registrierungswert neu zu schreiben.

Dazu müssen Sie winreg verwenden , um Registrierungswerte zu bearbeiten .

Sie können Ihre Registrierungsschlüssel über regedit.exe anzeigen, wenn Sie Windows verwenden.

Ich hoffe das hilft dir...

Afshin Salehi
quelle
Vielen Dank für Ihre Antwort. Ich glaube, ich müsste QGIS immer noch neu starten, wenn der Schlüssel vom Makro geschrieben wird, damit QGIS ihn beim Start liest. Immer noch auf der Suche nach einem Weg :)
Joseph