Как применить изменения в 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 применялись, когда проект загружен (начальные настройки будут применены повторно, когда проект закрыт).

Джозеф
источник
Когда вы вызываете sync () для фиксации ваших изменений, вызываете ли вы status ()?
Whyzar
@whyzar - Спасибо, но тоже это проверил и все равно без изменений.
Джозеф
2
Это так странно, может быть, ошибка , потому что происходит то же самое , используя QSettings().setValue("/qgis/legendLayersBold", False).Я думаю , что проблема в этой строке github.com/qgis/QGIS/blob/release-2_18/src/app/...
Fran Рага
1
возможный метод, QgisApp::instance()->legend()->updateLegendItemStyles();но в будущей версии, вероятно?
Фран Рага,
@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, чтобы прочитать его во время запуска. Все еще пытаюсь найти способ :)
Джозеф