จะใช้การเปลี่ยนแปลงใน 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 () เพื่อคอมมิทการเปลี่ยนแปลงของคุณคุณจะโทรสถานะ () หรือไม่?
Whyzar

@whyzar - ขอบคุณ แต่ทดสอบว่าเกินไปและยังไม่มีการเปลี่ยนแปลง
โจเซฟ

2
มันแปลกดังนั้นอาจจะมีข้อผิดพลาดเกิดขึ้นเพราะเดียวกันโดยใช้QSettings().setValue("/qgis/legendLayersBold", False).i คิดว่าปัญหาคือในบรรทัดนี้github.com/qgis/QGIS/blob/release-2_18/src/app/...
ฟราน 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 อ่านในระหว่างการเริ่มต้น ยังคงพยายามหาวิธี :)
โจเซฟ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.