[Development] Move QAction from QtWidgets to QtGui

Shawn Rutledge shawn.rutledge at nokia.com
Tue Jul 3 15:07:03 CEST 2012


On Tuesday wk27 2012 July 03 09:36:26 AM ext Anselmo L. S. Melo wrote:
> Hi,
> 
> On 07/03/2012 05:06 AM, Davide Bettio wrote:
> > Hello,
> > 
> > I've noticed that QAction hasn't been moved from QtWidgets module to
> > QtGui module, it would be really good if also that module gets moved
> > there.
> > QAction require QWidget for few things but I think that it is possible
> > to solve this problem easily.

How would you suggest solving it?  QAction does have stuff like

    bool showStatusText(QWidget *widget=0);
    QWidget *parentWidget() const;
    QList<QWidget *> associatedWidgets() const;
    friend class QWidget;

so it seems difficult to make it avoid depending on widgets without breaking 
API compatibility, which is why I figured we would need a separate Qt Quick 
action class.  Do you have any better ideas?

If we could somehow use the same class for both, maybe it would be possible to 
build UIs partially in Qt Quick and partially with widgets.

> It was discussed a few months ago, but at that time the decision was to not
> move QAction to QtGui. Unless this position has changed (as example of what
> happened to QIcon), there is a version of QAction without the QWidget
> dependency, in UiHelpers (http://qt-project.org/wiki/Qt-5-Ui-Helpers). The
> destiny of this "new version" still not defined.
> 
> Last week, Shawn Rutledge sent an e-mail to the qt-components list about
> updating this stripped version of QAction so it could be used by the
> desktop components. I think it's a good idea to check the status with him.

Yes I was still thinking of merging the one from UiHelpers, with some 
improvements, and then working on making it useful in Desktop Components.  
(But instead I've been working on multipoint-touch support some more, the last 
couple of days.)  The open issues I can think of are

* it needs to be possible to specify an icon with some kind of QML syntax 
(different pixmaps for different sizes)
* desktop components needs a mechanism to handle keyboard shortcuts
* need to make sure it's possible to create an action just once, but add it to 
multiple menus/toolbars/etc.
* need to associate a handler to do the actual work when the action is 
executed
* the undo/redo mechanism in UiHelpers doesn't have any connection with 
actions, rather it uses separate command objects.  But that makes sense in 
that actions are supposed to be single-instance objects; if you store the same 
pointer repeatedly on the undo stack, you won't be able to store any related 
state along with it, so probably there needs to be a separate instance of 
something each time the action is executed.  Maybe the action could at least 
act as a factory for the commands and push them on the undo stack 
automatically?

-- 
MVH, Shawn Rutledge ❖ "ecloud" on IRC



More information about the Development mailing list