English 中文(简体)
What settings storage format to choose?
原标题:

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

最佳回答

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

问题回答

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

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.

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





相关问题
how to represent it in dtd?

I have two element action and guid. guid is a required field when action is add. but when action is del it will not appear in file. How to represent this in dtd ?

.Net application configuration add xml-data

I need to add xml-content to my application configuration file. Is there a way to add it directly to the appSettings section or do I need to implement a configSection? Is it possible to add the xml ...

XStream serializing collections

I have a class structure that I would like to serialize with Xstream. The root class contains a collection of other objects (of varying types). I would like to only serialize part of the objects that ...

MS Word splits words in its XML format

I have a Word 2003 document saved as a XML in WordProcessingML format. It contains few placeholders which will be dynamically replaced by an appropriate content. But, the problem is that Word ...

Merging an XML file with a list of changes

I have two XML files that are generated by another application I have no control over. The first is a settings file, and the second is a list of changes that should be applied to the first. Main ...

How do I check if a node has no siblings?

I have a org.w3c.dom.Node object. I would like to see if it has any other siblings. Here s what I have tried: Node sibling = node.getNextSibling(); if(sibling == null) return true; else ...

Ordering a hash to xml: Rails

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished? hash.to_xml

热门标签