[Development] Settings API for QML

Alan Alpert 416365416c at gmail.com
Wed Dec 12 21:32:54 CET 2012

On Wed, Dec 12, 2012 at 2:13 AM, Mark <markg85 at gmail.com> wrote:
> On Wed, Dec 12, 2012 at 10:03 AM, Simon Hausmann
> <simon.hausmann at digia.com> wrote:
>> On Tuesday, December 11, 2012 04:40:50 PM Bache-Wiig Jens wrote:
>>> >>...
>> I think a dedicated syntax has two distinct advantages over a
>> Qt.storedProperty alike approach:
>>     (1) In a distinct syntax we can avoid loosing the type information and
>> instead preserve and propagate it into the settings backend. Preserving as
>> much type information as possible is going to be crucial for performance
>> optimizations in the future.
>>     (2) A syntax would allow for sensible group and avoiding repetitive
>> patterns in the settings names. In your example writing "application.width"
>> and "application.height" is not bad, "application" is repeated only twice. But
>> if you think of a real world use-case, then you have "application" repeated
>> many many times, which is prone to errors ("application" vs. accidentally
>> typing "applcation") and it's not very readable. Therefore I think a more
>> explicit syntax is more suitable:
>> PersistentSettings {
>>     id: mysettings
>>     group: "org.qt.examples.myapp.geometry"
>>     property int width: 800
>>     property int height: 600
>> }
>> Rectangle {
>>     width: mysettings.width
>>     height: mysettings.height
>> }
> How about:
> This one would be singleton.
> PersistentSettings {
>     id: settings
>     // All properties defined in here are the "global" properties
>     property int width: 800
>     property int height: 600
>     // Perhaps enforce that a GroupSettings item can only be
> constructed within the PersistentSettings item in an attempt to
> enforce settings to be located in one QML file. Don't know if that's
> wise or not. Just brainstorming.
>     GroupSettings {
>       id: myGroup
>       property int width: 800
>       property int height: 600
>    }
> }
> Then to use it:
> Item {
>   width: settings.width
> }
> To use the group settings:
> Item {
>   width: settings.myGroup.width
> }
> Just some brainstorming. I do like this syntax! It looks very easy and
> understandable to use.

Some of that syntax would just fall out of Simon's proposed item. The
singleton part at least, if we add QML singletons you can take a
standard PersistentSettings and make it a global singleton yourself
(so you could access it via Settings.width anywhere in your
application. I think that would be a much better way of accomplishing
that, rather than in the element.

As for the grouping, it could also be accomplished just with a default
subgroups property on the PersistentSettings, such than any 'child'
settings objects inherit the group. e.g.

PersistentSettings {
    group: "org.qt.examples.myapp"
    PersistentSettings {
         id: geo
        group: "geometry" //Automatically becomes
org.qt.examples.myapp.geometry because it's a child of the other item
    property PersistentSettings geometry: geo //This line is how you'd
get the Settings.myGroup.width style syntax yourself

So for the most part, you could theoretically get that syntax from
Simon's proposed item without having to add additional constraints on
the item everywhere. Just how you use it in your application.

Alan Alpert

More information about the Development mailing list