[Development] Enumerations in QML

Alan Alpert 416365416c at gmail.com
Tue Dec 11 20:12:05 CET 2012

On Tue, Dec 11, 2012 at 12:26 AM, Mark <markg85 at gmail.com> wrote:
> On Tue, Dec 11, 2012 at 4:47 AM, Alan Alpert <416365416c at gmail.com> wrote:
>> People keep asking for enumerations in QML. See QTBUG-15483 and
>> QTBUG-14861, both assigned to old Nokia identities (so don't trust
>> that 'in progress' ;) ). Now I don't know when these issues will be
>> resolved, but there's an important discussion to have before it can
>> even be scheduled: What would proper enum support look like in QML?
>> QTBUG-15483 suggests 'property Bar::Weather weather: Bar.Sunny', for
>> using the C++ 'enum Weather { Raining, Sunny, Cloudy }'. But
>> QTBUG-14861 does not include a suggestion of what the QML syntax for
>> declaring an enum should be (just a suggestion for how we could hack
>> it in there). It's totally not obvious to me what a good QML API for
>> declaring enums would be, and that could have run-on effects on how
>> they're used in property declarations. All we know is that Bar.Sunny
>> is how you use the enum exposed from C++, and that will need to
>> continue to work with QML defined enums. Note that "property
>> Bar::Weather weather" is just a suggestion as well, I actually suspect
>> "property Bar.Weather weather" would fit in better (but it depends on
>> how you declare them).
>> What should enumeration declarations in QML look like?
>> --
>> Alan Alpert
>> _______________________________________________
>> Development mailing list
>> Development at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/development
> I found myself in the exact same situation where it would've been
> really convenient to have enums in QML. However, one thing that is
> easy to forget is that you still have the full power of JavaScript at
> your disposal. And while JavaScript doesn't support enums as those
> that you have in C/C++, you still can have it's syntax.
> Look at this link: http://stackoverflow.com/questions/287903/enums-in-javascript
> The thing i'm using in my project is:
> var SIZE = {
>   SMALL : 0,
>   MEDIUM: 1,
>   LARGE : 2
> };
> and i'm "somewhat" sure that you can also do that in a qml property
> with something like this:
> property variant SIZE: {
>   SMALL : 0,
>   MEDIUM: 1,
>   LARGE : 2
> };

I just tested it and it almost works. In QML 2 you can do

property var sIZE: {
  "SMALL" : 0,
  "MEDIUM" : 1,
  "LARGE" : 2

But if you don't like those changes, you can do the var in a global
(.pragma library) script file and use that. Maybe this means proper
enum support isn't that urgent ;) .

Alan Alpert

More information about the Development mailing list