Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What settings storage format to choose?

Tags:

I'm writing a Qt application and will need to store the settings for the program. I want them to be easily editable by non-advanced users yet be flexible enough for advanced users (thus allow easy automated editing via other programs, scripts, whatever). QSettings does provide two formats, the native format, which for Windows is registry, and the INI format, which is native for most other platforms. INI is fine, but seeing @QString(...) or other Qt stuff in there isn't really readable and is kinda error-prone.

The registry isn't great either. It wasn't designed to be messed with and thus not exactly good for editing or advanced usage; it does solve the problem of synchronization across threads and multiple QSettings objects (so I don't wipe everything out, though I can just use one global object, protected by a read-write locker). I'm looking at XML, but it is pretty darned verbose and it does require writing a QSettings format (not really an issue) but very flexible.

I know other alternatives to XML exist but I'm not really familiar with them; I certainly don't want to write a parser, exception for my own final format, not for the base thing.

Update - Note: I will not bypass QSettings at all, I will just write a format for it - which looks like it is just two function pointers (for a read and for a write function) passed to a static function and then I can use my format.

Update 2: I am also worried about Linux servers, which usually don't have a GUI.. I want people to be able to edit the configuration easily from the server via nano or something similar, without using the manager (yes, I will have a daemon server and a remote GUI manager).

like image 943
CMircea Avatar asked Dec 01 '09 20:12

CMircea


2 Answers

You can use the QSettings class to achieve this. It's an abstraction class that allow your applications to store its settings in order to retrieve them at next launch.

Save settings:

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

Read settings:

QString v = settings.value("ValueName");
like image 51
Patrice Bernassola Avatar answered Oct 19 '22 23:10

Patrice Bernassola


If for whatever reason you end up bypassing QSettings and considering XML for your configuration file, I suggest you go look at JSON or YAST, depending on how you like the available libs.

As a sidenote, if you don't intend to have users ever edit the file manually, just choose whatever is easiest for you (QSettings?) and move on with your life, since the choice of format will not matter a single bit (har har).

like image 29
Tiberiu Ana Avatar answered Oct 20 '22 01:10

Tiberiu Ana