Come applicare immediatamente le modifiche a QSettings?


15

Con PyQGIS, puoi modificare varie impostazioni come rendere grassetti i gruppi nel pannello Livelli (o sommario):

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

Vengono scritte le impostazioni che possono essere visualizzate dalle opzioni o dalla digitazione:

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

Ma non viene applicato. Ho pensato di usare

QSettings().sync()

potrebbe aiutare, ma sfortunatamente no. L'unico modo per applicarlo sarebbe andare alla GUI ( Settings > Options) quindi fare clic OKo riavviare QGIS.

Esiste un metodo per farlo tramite PyQGIS?


Contesto :

Voglio aggiungere questo come una macro in un file di progetto per garantire (a fini estetici) che solo i nomi dei gruppi siano in grassetto e i nomi dei layer no. Pertanto, sarebbe ideale se le QSettings fossero applicate quando il progetto è stato caricato (le impostazioni iniziali sarebbero riapplicate alla chiusura del progetto).


Quando chiami sync () per confermare le modifiche, chiami status ()?
whyzar,

@whyzar - Grazie, ma ho provato anche quello e ancora nessun cambiamento.
Giuseppe,

2
È così strano, forse un bug perché si verifica lo stesso usando QSettings().setValue("/qgis/legendLayersBold", False). Penso che il problema sia in questa riga github.com/qgis/QGIS/blob/release-2_18/src/app/…
Fran Raga,

1
il metodo possibile è, QgisApp::instance()->legend()->updateLegendItemStyles();ma in una versione futura probabilmente?
Fran Raga,

@FranciscoRaga - Grazie per il link, sembra un bug. Stavo pensando di pubblicare una segnalazione di bug ma con QGIS 3.0 che uscirà presto, aspetterò e vedrò se questo problema esiste ancora nella nuova versione =)
Joseph,

Risposte:


2

Penso che non sia possibile a meno che tu non scriva una chiave con lo stato predefinito nel \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state dare un'occhiata qui .

in realtà, quando riavviamo il software lo fa automaticamente per noi.

controlla questa soluzione:

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

se non funziona, devi scrivere uno script per riscrivere quel valore di registro.

per fare ciò è necessario utilizzare winreg per manipolare i valori del registro.

è possibile visualizzare le chiavi del Registro di sistema tramite regedit.exe se si utilizza Windows.

Spero che questo ti aiuta...


Grazie per la tua risposta, penso che dovrei ancora riavviare QGIS quando la chiave è scritta dalla macro per consentire a QGIS di leggerlo durante l'avvio. Sto ancora cercando un modo :)
Joseph,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.