2009-12-01 15 views
5

Sto scrivendo un'applicazione Qt e sarà necessario memorizzare le impostazioni per il programma. Voglio che siano facilmente modificabili da utenti non avanzati, ma che siano sufficientemente flessibili per gli utenti avanzati (consentendo quindi un facile editing automatico tramite altri programmi, script o altro). QSettings fornisce due formati, il formato nativo, che per Windows è il registro e il formato INI, che è nativo per la maggior parte delle altre piattaforme. INI va bene, ma vedere @QString (...) o altre cose di Qt lì non è veramente leggibile ed è abbastanza incline agli errori.Quale formato di archiviazione delle impostazioni scegliere?

Il registro non è eccezionale. Non è stato progettato per essere incasinato e quindi non esattamente adatto per l'editing o l'utilizzo avanzato; risolve il problema della sincronizzazione tra thread e più oggetti QSettings (quindi non cancellare tutto, anche se posso semplicemente usare un oggetto globale, protetto da un locker di lettura-scrittura). Sto guardando XML, ma è piuttosto prolisso e richiede la scrittura di un formato QSettings (non proprio un problema) ma molto flessibile.

Conosco altre alternative all'XML ma non mi è molto familiare; Certamente non voglio scrivere un parser, eccezione per il mio formato finale, non per la cosa di base.

Aggiornamento - Nota: io non QSettings by-pass a tutti, mi limiterò a scrivere un formato per esso - che sembra che è a soli due puntatori a funzione (per una lettura e per una funzione di scrittura) passato a una statica funzione e quindi posso usare il mio formato.

Aggiornamento 2: Sono anche preoccupato per i server Linux, che di solito non hanno una GUI. Voglio che le persone siano in grado di modificare facilmente la configurazione dal server tramite nano o qualcosa di simile, senza utilizzare il manager (sì, avrò un server daemon e un gestore GUI remoto).

risposta

1

Se per qualsiasi motivo si finisce bypassando QSettings e considerando XML per il file di configurazione, vi consiglio di andare a vedere JSON o YAST , a seconda di come ti piacciono le librerie disponibili.

Come sidenote, se non si intende che gli utenti modifichino manualmente il file, basta scegliere quello che è più semplice per te (QSettings?) E andare avanti con la tua vita, poiché la scelta del formato non ha importanza single bit (har har).

+0

Le guarderò e vedrò come scrivere un formato QSettings se Io scelgo eiher. Importante quando si passa da un computer all'altro. Un file è facile come copiare il file. È necessario esportare una chiave di registro in un file, quindi importarla. E regedit potrebbe lamentarsi se gli dai un file .reg creato con un nuovo regedit. – CMircea

0

Un altro modo di considerare la verbosità è la robustezza del contenuto. Se per qualsiasi ragione (una particella alfa che bombarda il disco, causando un solo capovolgimento), puoi comunque andare lì e apportare la correzione degli errori necessaria ... quindi c'è un vantaggio, ma anche un costo ad esso associato ... con un file binario, un errore a bit singolo significa che i dati sono completamente persi

+1

Questo è vero, ma in questo caso probabilmente accanto al punto.Mi preoccuperei sicuramente della corruzione silenziosa dei dati e del ripristino manuale di documenti, elementi di lavoro e simili, ma probabilmente non è un grosso problema per lo storage delle impostazioni. –

+0

Non un grosso problema per le impostazioni, solo l'utente che modifica manualmente il file e rompe la struttura, ma che può essere controllato e persino corretto (o rimosso/ignorato semplicemente) facilmente. – CMircea

1

Vorrei iniziare con QSettings tramite i file .ini e verificare se si riscontrano molti problemi. Se non ci sono problemi, non c'è bisogno di cercare una soluzione XML. Se si finisce col volere la soluzione XML, si potrebbe (come già detto) aggiungere un formattatore per gli oggetti QSettings.

3

È possibile utilizzare la classe QSettings per ottenere ciò. È una classe di astrazione che consente alle applicazioni di memorizzare le proprie impostazioni per recuperarle al prossimo avvio.

Salva impostazioni:

QSettings settings("ValueName", "Value"); 

impostazioni Leggi:

QString v = settings.value("ValueName"); 
+0

Per favore, leggi di nuovo la mia domanda. Lo so e userò QSettings, ma sono preoccupato per il formato sottostante. QSettings fornisce un formato INI e un formato di registro di Windows. – CMircea

+0

QSettings utilizza il formato di archiviazione "standard" relativo al sistema operativo. Ecco perché ho parlato di astrazione. Questa classe ti consente di utilizzare il formato standard di ciascun sistema anche se non sono gli stessi. Questo è il modo in cui Qt salva i valori per la tua app. Non è necessario farlo da solo, a meno che non si desideri salvare oggetti complessi. In questo caso penso che XML sia il modo migliore. –

+1

L'OP sta dicendo che vuole che gli utenti della sua app modifichino le impostazioni con facilità, non che voglia salvare le impostazioni con facilità (perché lo è già) – blwy10

Problemi correlati