Jak natychmiast zastosować zmiany w QSettings?

15

Za pomocą PyQGIS można zmieniać różne ustawienia, takie jak pogrubienie grup w panelu warstw (lub spisie treści):

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

Ustawienia są zapisywane, co można zobaczyć w opcjach lub po wpisaniu:

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

Ale to się nie stosuje. Myślałem za pomocą

QSettings().sync()

może pomóc, ale niestety nie. Jedynym sposobem na jego zastosowanie byłoby przejście do GUI ( Settings > Options), a następnie kliknięcie OKlub zrestartowanie QGIS.

Czy istnieje metoda wykonania tego za pomocą PyQGIS?


Kontekst :

Chcę dodać to jako makro w pliku projektu, aby upewnić się (ze względów estetycznych), że tylko nazwy grup są pogrubione, a nazwy warstw nie. Dlatego idealnie byłoby, gdyby ustawienia QSettings były stosowane po załadowaniu projektu (ustawienia początkowe byłyby ponownie zastosowane po zamknięciu projektu).

Joseph
źródło
Kiedy wywołujesz sync () w celu zatwierdzenia zmian, czy wywołujesz status ()?
whyzar
@whyzar - Dziękuję, ale też to przetestowałem i wciąż nie wprowadzam żadnych zmian.
Joseph
2
To takie dziwne, może błąd, ponieważ występuje to samo przy użyciu. QSettings().setValue("/qgis/legendLayersBold", False)Myślę, że problem jest w tej linii github.com/qgis/QGIS/blob/release-2_18/src/app/…
Fran Raga
1
możliwa jest metoda, QgisApp::instance()->legend()->updateLegendItemStyles();ale prawdopodobnie w przyszłej wersji?
Fran Raga
@FranciscoRaga - Dzięki za link, wygląda na błąd. Myślałem o opublikowaniu raportu o błędzie, ale wkrótce pojawi się QGIS 3.0, poczekam i zobaczę, czy ten problem nadal występuje w nowej wersji =)
Joseph,

Odpowiedzi:

2

Myślę, że nie jest to możliwe, chyba że napiszesz klucz ze stanem domyślnym w swoim \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state spojrzeniu tutaj .

w rzeczywistości, kiedy ponownie uruchomimy oprogramowanie, zrobi to za nas automatycznie.

sprawdź to rozwiązanie:

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

jeśli to nie działa, musisz napisać skrypt, aby przepisać tę wartość rejestru.

aby to zrobić, musisz użyć winreg do manipulowania wartościami rejestru.

możesz przeglądać klucze rejestru za pomocą regedit.exe, jeśli korzystasz z systemu Windows.

Mam nadzieję, że to Ci pomoże...

Afshin Salehi
źródło
Dzięki za odpowiedź, myślę, że nadal musiałbym ponownie uruchomić QGIS, gdy makro jest zapisywane przez makro, aby QGIS mógł odczytać go podczas uruchamiania. Wciąż próbuję znaleźć sposób :)
Joseph