[Development] QAction-like API for QML
André Somers
andre at familiesomers.nl
Tue Dec 11 12:10:56 CET 2012
Op 11-12-2012 4:39, Alan Alpert schreef:
> QAction served widgets well as an abstraction for an "Action" which is
> exposed to the UI in a platform specific manner. This was shared
> between menus and toolbars and some other things. I think we'll need
> something similar for QML, so that the QtQuick controls can provide
> platform styled menus, toolbars, and perhaps some other things. This
> is particularly important for those working on the modern
> cross-platform challenge of scaling to different devices - we need the
> actions generic enough to fit a phone's itty bitty little menu as well
> as the unifed menubar that spans over 2000px on today's Macs.
Please note that there have been earlier discussions on this, also
discussing ways to share a common base between QAction and some QML
equivalent.
> Note that it has no-where near as many properties as QAction. toolTip
> and whatsThis for example are very desktop centric so not needed
> anymore. Because it's not actually doing the rendering it doesn't need
> enabled, visible or font. As for the rest I think it's better to start
> with the minimal essentials and add stuff later if it's needed. I'm on
> the fence about whether checkable needs to be in the first version
> even, I can't recall the last time I actually saw a checkable menu
> item.
Well, I think that's where you go wrong already. Enabled *is* a very
useful property to have, even if you use the action only as an abstract
representation. At least, I use QAction in some non-gui code where the
base properties like the enabled flag are manipulated as the
availability of an action changes due to state changes in the
application. At that level, I really don't care about how that is
represented, but I do care that I have one unified object to represent
the action.
That action object for me, at the very basis, represents a handle to
trigger the action and tells me about its availability. The action would
be void action: taking no arguments. But the enabled property belongs in
there.
Just above that, it may need something like a value. The current QAction
has that in the form of the checked property. It is basically restricted
to a single type of value with that, but I don't think that that is by
defintion the only useful value an action could have. On the other hand:
by far not all actions actually _need_ any value, boolean or not.
Above that, the action may need a representation in the GUI, and that
results in a name, visibility, an icon, a tooltip, etc. This is where
the real differentation between the Widget and QML worlds would occur, I
think. For instance the way images are handled are very different, using
QPixmap, QIcon or QImage in the widget world, and using a URL in the QML
world. And, indeed, some things like tooltips probably don't make sense
in the (primarily touch-oriented) QML world, while they are a must on
the desktop.
Grouping, IMHO, belongs on that top level as well.
I don't know what the best realization of something like the above might
be, but you might want to considder it in your quest to give QML actions
as well. I think at least that part of the reasoning: that the concept
is useful in QML as well, is very sound.
André
More information about the Development
mailing list