From 08e4d2db084f6abbf1840ffb694b15bd215ad069 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 8 Jul 2021 16:14:50 +0200 Subject: QWidget: copy Q{Menu,ToolBar}::addActions() functions Since any QWidget can have actions since at least Qt 5.0, it makes no sense to keep the addActions(text) etc. convenience functions that have traditionally existed in QMenu and QToolBar only in these two classes, where, to add insult to injury, they were just copies of each other, increasing library size for no real reason. So, add them to QWidget, too. This will allow us to de-duplicate the code between QMenu and QToolBar, too, which will be done in a follow-up patch, subject to BC constraints. [ChangeLog][QtWidgets][QWidget] Added the same addAction(text) overloads that previously existed only on QMenu and QToolBar, with the following two differences: First, the QKeySequence object, if any, is now available on all overloads, not just the ones taking a slot, but has changed position to allow, secondly, passing an optional Qt::ConnectionType parameter which will be passed to the QObject::connect() call. In addition, the function template overloads are now properly constrained so that they exist if and only if the corresponding QObject::connect() call does, too. Change-Id: Ifc3c2789600cf603192de8224fecbf9c88d91970 Reviewed-by: Volker Hilsheimer Reviewed-by: Richard Moe Gustavsen Reviewed-by: Fabian Kosmale --- src/widgets/kernel/qwidget.cpp | 121 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) (limited to 'src/widgets/kernel/qwidget.cpp') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 95d38c4882..8c1ceaf41e 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -3207,6 +3207,127 @@ QList QWidget::actions() const Q_D(const QWidget); return d->actions; } + +/*! + \fn QAction *QWidget::addAction(const QString &text); + \fn QAction *QWidget::addAction(const QString &text, const QKeySequence &shortcut); + \fn QAction *QWidget::addAction(const QIcon &icon, const QString &text); + \fn QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut); + + \since 6.3 + + These convenience functions create a new action with text \a text, + icon \a icon and shortcut \a shortcut, if any. + + The functions add the newly created action to the widget's + list of actions, and return it. + + QWidget takes ownership of the returned QAction. +*/ +QAction *QWidget::addAction(const QString &text) +{ + QAction *ret = new QAction(text, this); + addAction(ret); + return ret; +} + +QAction *QWidget::addAction(const QIcon &icon, const QString &text) +{ + QAction *ret = new QAction(icon, text, this); + addAction(ret); + return ret; +} + +QAction *QWidget::addAction(const QString &text, const QKeySequence &shortcut) +{ + QAction *ret = addAction(text); + ret->setShortcut(shortcut); + return ret; +} + +QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut) +{ + QAction *ret = addAction(icon, text); + ret->setShortcut(shortcut); + return ret; +} + +/*! + \fn QAction *QWidget::addAction(const QString &text, const QObject *receiver, const char* member, Qt::ConnectionType type) + \fn QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char* member, Qt::ConnectionType type) + \fn QAction *QWidget::addAction(const QString &text, const QKeySequence &shortcut, const QObject *receiver, const char* member, Qt::ConnectionType type) + \fn QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, const QObject *receiver, const char* member, Qt::ConnectionType type) + + \overload + \since 6.3 + + This convenience function creates a new action with the text \a + text, icon \a icon, and shortcut \a shortcut, if any. + + The action's \l{QAction::triggered()}{triggered()} signal is connected + to the \a receiver's \a member slot. The function adds the newly created + action to the widget's list of actions and returns it. + + QWidget takes ownership of the returned QAction. +*/ +QAction *QWidget::addAction(const QString &text, const QObject *receiver, const char* member, + Qt::ConnectionType type) +{ + QAction *action = addAction(text); + QObject::connect(action, SIGNAL(triggered(bool)), receiver, member, type); + return action; +} + +QAction *QWidget::addAction(const QIcon &icon, const QString &text, + const QObject *receiver, const char* member, + Qt::ConnectionType type) +{ + QAction *action = addAction(icon, text); + QObject::connect(action, SIGNAL(triggered(bool)), receiver, member, type); + return action; +} + +#if QT_CONFIG(shortcut) +QAction *QWidget::addAction(const QString &text, const QKeySequence &shortcut, + const QObject *receiver, const char* member, + Qt::ConnectionType type) +{ + QAction *action = addAction(text, receiver, member, type); + action->setShortcut(shortcut); + return action; +} + +QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, + const QObject *receiver, const char* member, + Qt::ConnectionType type) +{ + QAction *action = addAction(icon, text, receiver, member, type); + action->setShortcut(shortcut); + return action; +} +#endif // QT_CONFIG(shortcut) + +/*! + \fn template QAction *QWidget::addAction(const QString &text, Args&&...args) + \fn template QAction *QWidget::addAction(const QString &text, const QShortcut &shortcut, Args&&...args) + \fn template QAction *QWidget::addAction(const QIcon &icon, const QString &text, Args&&...args) + \fn template QAction *QWidget::addAction(const QIcon &icon, const QString &text, const QShortcut &shortcut, Args&&...args) + + \since 6.3 + \overload + + These convenience functions create a new action with the text \a text, + icon \a icon, and shortcut \a shortcut, if any. + + The action's \l{QAction::triggered()}{triggered()} signal is connected + as if by a call to QObject::connect(action, &QAction::triggered, args...), + perfectly forwarding \a args, including a possible Qt::ConnectionType. + + The function adds the newly created action to the widget's list of + actions and returns it. + + QWidget takes ownership of the returned QAction. +*/ #endif // QT_NO_ACTION /*! -- cgit v1.2.3