2009-12-01 15 views
5

Escribo una aplicación Qt y necesito guardar la configuración para el programa. Quiero que sean fácilmente editables para usuarios no avanzados, pero sean lo suficientemente flexibles para los usuarios avanzados (lo que permite una fácil edición automatizada a través de otros programas, scripts, lo que sea). QSettings proporciona dos formatos, el formato nativo, que para Windows es el registro, y el formato INI, que es nativo para la mayoría de las otras plataformas. INI está bien, pero ver @QString (...) u otras cosas Qt allí no es realmente legible y es un poco propenso a errores.¿Qué configuración de formato de almacenamiento elegir?

El registro tampoco es bueno. No fue diseñado para ser alterado y, por lo tanto, no es exactamente bueno para la edición o el uso avanzado; resuelve el problema de la sincronización entre subprocesos y múltiples objetos QSettings (por lo que no elimino todo, aunque solo puedo usar un objeto global, protegido por un casillero de lectura y escritura). Estoy viendo XML, pero es bastante detallado y requiere escribir un formato QSettings (no es realmente un problema) pero muy flexible.

Sé que otras alternativas a XML existir pero no estoy muy familiarizado con ellos; Ciertamente no quiero escribir un analizador, excepción para mi propio formato final, no para la base.

Actualización - Nota: no voy a QSettings derivación en absoluto, que se acaba de escribir un formato para ella - que parece que está a sólo dos punteros de función (para una lectura y una función de escritura) pasa a un estático función y luego puedo usar mi formato.

Actualización 2: También me preocupan los servidores Linux, que generalmente no tienen una GUI ... Quiero que las personas puedan editar la configuración fácilmente desde el servidor a través de nano o algo similar, sin usar el administrador (sí, tendré un servidor daemon y un administrador remoto de GUI).

Respuesta

1

Si por cualquier razón se termina sin pasar por QSettings y teniendo en cuenta XML para el archivo de configuración, le sugiero que vaya vistazo a JSON o YAST , dependiendo de cómo te gusten las librerías disponibles.

Como nota al margen, si no tiene la intención de que los usuarios editen el archivo manualmente, simplemente elija lo que sea más fácil para usted (QSettings?) Y continúe con su vida, ya que la elección del formato no importará. un solo bit (har har).

+0

Los miraré y veré cómo escribir un formato QSettings si Yo elijo eiher. Importa cuando se mueve a través de las computadoras. Un archivo es tan fácil como copiar el archivo. Una clave de registro debe exportarse a un archivo y luego importarse. Y regedit podría quejarse si le das un archivo .reg creado con un regedit más nuevo. – CMircea

0

Otra forma de verlo es la verbosidad robustez contenido. Si por alguna razón (una partícula alfa bombardea el disco, haciendo que un solo bit se voltee), aún puede entrar allí y hacer la corrección de error necesaria ... para que haya un beneficio, pero también un costo asociado ... con un archivo binario, significa un solo bit de error los datos se pierden por completo

+1

Eso es cierto, pero en este caso probablemente fuera del punto.Definitivamente me preocuparía la corrupción de datos silenciosos y la recuperación manual de documentos, elementos de trabajo y similares, pero probablemente no sea un gran problema para el almacenamiento de configuraciones. –

+0

No es un gran problema para la configuración, solo el usuario edita manualmente el archivo y rompe la estructura, pero eso se puede verificar e incluso arreglar (o eliminar/ignorar) fácilmente. – CMircea

1

me gustaría empezar con la realización de las QSettings a través de archivos ini, y ver si se termina con muchos problemas con él. Si no hay problemas, entonces no hay necesidad de buscar una solución XML. Si terminas queriendo la solución XML, podrías (como se mencionó) agregar un formateador para los objetos QSettings.

3

Usted puede utilizar la clase QSettings para lograrlo. Es una clase de abstracción que permite a las aplicaciones almacenar sus configuraciones para recuperarlas en el próximo lanzamiento.

Guardar configuración:

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

las configuraciones leidas:

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

Por favor, lea mi pregunta de nuevo. Lo sé y usaré QSettings, pero me preocupa el formato subyacente. QSettings proporciona un formato INI y un formato de registro de Windows. – CMircea

+0

QSettings está utilizando el formato de almacenamiento "estándar" con respecto al sistema operativo. Es por eso que hablé acerca de la abstracción. Esta clase le permite usar el formato estándar de cada sistema, incluso si no son lo mismo. De esta forma, Qt guarda los valores de tu aplicación. No es necesario que lo hagas solo a menos que quieras guardar objetos complejos. En este caso, creo que XML es la mejor manera. –

+1

El OP dice que quiere que los usuarios de su aplicación editen la configuración con facilidad, no que quiera guardar la configuración con facilidad (porque ya lo está) – blwy10

Cuestiones relacionadas