QSettings에 변경 사항을 즉시 적용하는 방법은 무엇입니까?


15

PyQGIS를 사용하면 레이어 패널 (또는 목차)에서 그룹을 굵게 표시하는 등 다양한 설정을 변경할 수 있습니다.

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

옵션 또는 입력을 통해 볼 수있는 설정이 작성됩니다.

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

그러나 적용되지 않습니다. 나는 생각했다

QSettings().sync()

불행히도 도움이 될 수는 없습니다. 적용 할 수있는 유일한 방법은 GUI ( Settings > Options)로 이동 한 다음 OKQGIS 를 클릭 하거나 다시 시작하는 것입니다.

PyQGIS를 통해이 작업을 수행하는 방법이 있습니까?


맥락 :

그룹 파일 만 굵은 체와 레이어 이름이 아닌 것을 (미학적 목적으로) 프로젝트 파일에 매크로로 추가하고 싶습니다. 따라서 프로젝트가로드 될 때 QSettings가 적용되는 것이 이상적입니다 (프로젝트가 닫힐 때 초기 설정이 다시 적용됨).


sync ()를 호출하여 변경 사항을 커밋하면 status ()를 호출합니까?
whyzar

@whyzar-고맙지 만 테스트했지만 여전히 변경 사항이 없습니다.
Joseph

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이 곧 출시 될 예정입니다.이 문제가 새 버전에 계속 존재하는지 확인할 것입니다. =)
Joseph

답변:


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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.