Як негайно застосувати зміни до QSettings?


15

За допомогою PyQGIS ви можете змінювати різні налаштування, такі як зробити групи на панелі шарів (або змісту) жирними:

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

Налаштування записані, що видно з опцій або з набору тексту:

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

Але це не застосовується. Я думав використовувати

QSettings().sync()

може допомогти, але, на жаль, ні. Єдиний спосіб застосувати його - це або перейти до GUI ( Settings > Options), потім натиснути OKабо перезапустити QGIS.

Чи існує спосіб зробити це через PyQGIS?


Контекст :

Я хочу додати це як макрос у файл проекту, щоб переконатися (з естетичних цілей), що лише імена груп є жирними, а назви шарів - ні. Тому було б ідеально, якщо QSettings застосовуватимуться під час завантаження проекту (початкові налаштування будуть застосовані повторно, коли проект закриється).


Коли ви зателефонуєте синхронізувати (), щоб здійснити зміни, чи ви тоді дзвоните статус ()?
Whyzar

@whyzar - Дякую, але перевірив, що теж не зміниться.
Йосиф

2
Це так дивно, можливо помилка, тому що трапляється те саме за допомогою. QSettings().setValue("/qgis/legendLayersBold", False)Я думаю, що проблема полягає в цьому рядку github.com/qgis/QGIS/blob/release-2_18/src/app/…
Fran Raga

1
можливий метод, QgisApp::instance()->legend()->updateLegendItemStyles();але, можливо, у майбутній версії?
Fran Raga

@FranciscoRaga - Дякую за посилання, це здається помилкою. Я думав надсилати повідомлення про помилку, але, коли незабаром з’явиться QGIS 3.0, я зачекаю і побачу, чи ця проблема все ще існує в новій версії =)
Джозеф

Відповіді:


2

Я думаю , що це не можливо , якщо ви не написати ключ зі станом за замовчуванням в вашому \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state гляньте тут .

насправді, коли ми перезапускаємо програмне забезпечення, це автоматично робить це за нас.

перевірте це рішення:

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

якщо це не працює, потрібно написати сценарій, щоб переписати це значення реєстру.

для цього вам потрібно використовувати winreg для маніпулювання значеннями реєстру.

ви можете переглянути ключі реєстру через regedit.exe, якщо ви використовуєте Windows.

Я сподіваюся, що це допоможе вам ...


Дякую за вашу відповідь, я думаю, мені все одно доведеться перезапустити QGIS, коли ключ написаний макросом для QGIS, щоб прочитати його під час запуску. Ще намагаюся знайти спосіб :)
Йосип
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.