[Development] Settings API for QML
Nurmi J-P
jpnurmi at digia.com
Sat Jun 22 12:16:27 CEST 2013
On Jun 22, 2013, at 9:02 AM, Hausmann Simon <Simon.Hausmann at digia.com> wrote:
> You're right, the language extension can be totally separate from settings at the moment. It makes indeed most sense to land things in pieces like you proposed.
>
> Simon
>
> Alan Alpert <416365416c at gmail.com> wrote:
>
>
> On Fri, Jun 21, 2013 at 2:24 PM, Jeremy Katz <jeremy.k.list at gmail.com> wrote:
>> On 06/21/2013 09:58 AM, Hausmann Simon wrote:
>>> Hi,
>>>
>>> I like this, but as a next step I think it would be good to get rid of the manual JS code for saving.
>>>
>>> What about a general syntax of annotating properties? Then settings could be implemented on top by introspecting for properties annotated with settings tags and then save/restore then.
>
> My biggest concern about that approach right now is the scope of the
> change. We can't back out language features as easily as we can a
> module.
>
> I'd approve adding a Qt.labs.settings element, with the API specified
> by JP, because it gives us what we need and is the most easily
> changeable. If we get to annotating properties, we drop the
> Qt.labs.settings element (after a period of deprecation). We can play
> around with the backend so long as the QML API works, because while a
> consistent and reliable on disk format is important for a complete
> API, for a labs module I'm happy with just the QML API while we figure
> out other implementation details.
>
> The need for this feature seems great enough that people are willing
> to sacrifice some of the important details in order to get the basic
> functionality available to QML now (5.2).
>
>> I feel like discussion of what this is for has taken a secondary
>> position to syntax and implementation details.
>
> I feel that the "why" discussion was already solved. The "how" is
> coming up again because it's the sticking point. Here's my
> understanding of what's needed:
>
>> * Is access limited to the application, shared (system wide or multiple
>> scopes?), or both?
>
> Application (although in a more usable format than QtQuick.LocalStorage)
>
>> * If shared, does an application receive notification of external
>> updates?
>>
>> * If shared, does an application have control over when changes are
>> propagated?
>>
>> * Is this targeting a designated storage format, or system (plugin?)
>> implementation defined?
>
> No. The storage format is one of the biggest sticking points because
> QSettings has no friends anymore. But that's not really useful for the
> usecase (given that it is not intended for shared settings).
>
>> * Is the storage meant to be usable by non-Qt applications?
>>
>> * Is the storage hierarchical?
>>
>>
>> To some degree, all of these have been discussed. Have any conclusions
>> been reached, or are we waiting for a decision by implementation?
>
> There are unanswered questions about the implementation, but usually
> having something that works trumps those whether we're waiting or not
> ;).
>
As Alan clarified, the proposal is to provide a stopgap solution via the labs module.
I think we all agree that it's currently unnecessarily tedious for QML application developers to bake their own persistent settings solutions. Personally I've done it so far in quite a few QML apps using either QSettings in C++ or LocalStorage in QML.
While QSettings has its flaws and limitations, it can handle the main use case (simple persistent settings backend without notifications, bells and whistles) just fine. IMHO it's a matter of documenting the limitations and stating clearly that it's not a full-blown publish and subscribe system. Furthermore, keeping the API minimal and QSettings-agnostic might even make it possible to port it over to the mighty new settings system once someone implements it. :)
--
J-P Nurmi
More information about the Development
mailing list