如何立即应用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/...
弗兰拉格

1
可能的方法是,QgisApp::instance()->legend()->updateLegendItemStyles();但可能在将来的版本中?
Fran Raga

@FranciscoRaga-感谢您的链接,它似乎确实是一个错误。我原本打算发布一个错误报告,但是随着QGIS 3.0即将发布,我将拭目以待,看看新版本中是否仍然存在此问题=)
Joseph

Answers:


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来操纵注册表值。

如果使用Windows,则可以通过regedit.exe查看注册表项。

我希望这可以帮助你...


感谢您的回答,我认为当宏编写密钥以便QGIS在启动期间读取它时,我仍然必须重新启动QGIS。仍在尝试寻找方法:)
约瑟夫(Joseph)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.