Bagaimana cara menerapkan perubahan dalam QSettings segera?

15

Dengan PyQGIS, Anda dapat mengubah berbagai pengaturan seperti membuat grup di Panel Layers (atau daftar isi) tebal:

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

Pengaturan ditulis yang dapat dilihat dari opsi atau dari mengetik:

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

Tapi itu tidak diterapkan. Saya pikir menggunakan

QSettings().sync()

mungkin membantu tetapi sayangnya tidak. Satu-satunya cara untuk menerapkannya adalah pergi ke GUI ( Settings > Options) lalu klik OKatau mulai ulang QGIS.

Apakah ada metode untuk melakukan ini melalui PyQGIS?


Konteks :

Saya ingin menambahkan ini sebagai makro dalam file proyek untuk memastikan (untuk tujuan estetika) bahwa hanya nama grup yang tebal dan nama layer tidak. Oleh karena itu, akan ideal jika QSettings diterapkan ketika proyek telah dimuat (pengaturan awal akan diterapkan kembali ketika proyek ditutup).

Yusuf
sumber
Saat Anda memanggil sinkronisasi () untuk melakukan perubahan, apakah Anda kemudian memanggil status ()?
whyzar
@whyzar - Terima kasih tetapi diuji juga dan masih tidak ada perubahan.
Joseph
2
Sangat aneh, mungkin bug karena menggunakan hal yang sama. QSettings().setValue("/qgis/legendLayersBold", False)Saya pikir masalahnya ada di baris ini github.com/qgis/QGIS/blob/release-2_18/src/app/…
Fran Raga
1
metode yang mungkin QgisApp::instance()->legend()->updateLegendItemStyles();tetapi dalam versi masa depan mungkin?
Fran Raga
@FranciscoRaga - Terima kasih atas tautannya, sepertinya memang bug. Saya berpikir untuk memposting laporan bug tetapi dengan QGIS 3.0 segera hadir, saya akan menunggu dan melihat apakah masalah ini masih ada di versi baru =)
Joseph

Jawaban:

2

Saya pikir itu tidak mungkin kecuali Anda menulis kunci dengan status default ke Anda \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state lihat di sini .

sebenarnya, ketika kita me-restart perangkat lunak secara otomatis melakukan ini untuk kita.

periksa solusi ini:

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

jika tidak berhasil, Anda harus menulis skrip untuk menulis ulang nilai registri itu.

untuk melakukannya, Anda perlu menggunakan winreg untuk memanipulasi nilai registri.

Anda dapat melihat kunci registri Anda melalui regedit.exe jika Anda menggunakan windows.

Saya harap ini membantu Anda ...

Afshin Salehi
sumber
Terima kasih atas jawaban Anda, saya pikir saya masih harus me-restart QGIS ketika kunci ditulis oleh makro untuk QGIS untuk membacanya saat startup. Masih berusaha mencari jalan :)
Joseph