5
votes

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).

4

4 Answers

1
votes

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).

3
votes

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");
1
votes

I would start with doing the QSettings via .ini files, and see if you end up with many problems with it. If there aren't problems, then there's no need to go for an XML solution. If you do end up wanting the XML solution, you could (as mentioned) add a formatter for the QSettings objects.

0
votes

Another way to look at verbosity is content robustness. If for any reason (an alpha particle bombarding the disk, causing single bit to flip), you can still go in there and make the necessary error correction... so there is benefit, but also cost associated with it ... with a binary file, a single bit error means the data is completely lost