summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/kernel/qwidget.cpp121
-rw-r--r--src/widgets/kernel/qwidget.h56
2 files changed, 176 insertions, 1 deletions
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<QAction*> 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<typename...Args> QAction *QWidget::addAction(const QString &text, Args&&...args)
+ \fn template<typename...Args> QAction *QWidget::addAction(const QString &text, const QShortcut &shortcut, Args&&...args)
+ \fn template<typename...Args> QAction *QWidget::addAction(const QIcon &icon, const QString &text, Args&&...args)
+ \fn template<typename...Args> 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
/*!
diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h
index c1c679c026..ee6e7d5fe6 100644
--- a/src/widgets/kernel/qwidget.h
+++ b/src/widgets/kernel/qwidget.h
@@ -44,6 +44,7 @@
#include <QtGui/qwindowdefs.h>
#include <QtCore/qobject.h>
#include <QtCore/qmargins.h>
+#include <QtGui/qaction.h>
#include <QtGui/qpaintdevice.h>
#include <QtGui/qpalette.h>
#include <QtGui/qfont.h>
@@ -210,6 +211,11 @@ class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
Q_PROPERTY(QString windowFilePath READ windowFilePath WRITE setWindowFilePath)
Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints)
+ template <typename...Args>
+ using compatible_action_slot_args = std::void_t<
+ decltype(QObject::connect(std::declval<QAction*>(), &QAction::triggered,
+ std::declval<Args>()...))
+ >;
public:
enum RenderFlag {
DrawWindowBackground = 0x1,
@@ -569,7 +575,55 @@ public:
void insertAction(QAction *before, QAction *action);
void removeAction(QAction *action);
QList<QAction*> actions() const;
-#endif
+
+ // convenience action factories
+ QAction *addAction(const QString &text);
+ QAction *addAction(const QIcon &icon, const QString &text);
+ QAction *addAction(const QString &text, const QObject *receiver,
+ const char *member, Qt::ConnectionType type = Qt::AutoConnection);
+ QAction *addAction(const QIcon &icon, const QString &text, const QObject *receiver,
+ const char *member, Qt::ConnectionType type = Qt::AutoConnection);
+ template <typename...Args, typename = compatible_action_slot_args<Args...>>
+ QAction *addAction(const QString &text, Args&&...args)
+ {
+ QAction *result = addAction(text);
+ connect(result, &QAction::triggered, std::forward<Args>(args)...);
+ return result;
+ }
+ template <typename...Args, typename = compatible_action_slot_args<Args...>>
+ QAction *addAction(const QIcon &icon, const QString &text, Args&&...args)
+ {
+ QAction *result = addAction(icon, text);
+ connect(result, &QAction::triggered, std::forward<Args>(args)...);
+ return result;
+ }
+
+#if QT_CONFIG(shortcut)
+ QAction *addAction(const QString &text, const QKeySequence &shortcut);
+ QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut);
+ QAction *addAction(const QString &text, const QKeySequence &shortcut,
+ const QObject *receiver, const char *member,
+ Qt::ConnectionType type = Qt::AutoConnection);
+ QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut,
+ const QObject *receiver, const char *member,
+ Qt::ConnectionType type = Qt::AutoConnection);
+
+ template <typename...Args, typename = compatible_action_slot_args<Args...>>
+ QAction *addAction(const QString &text, const QKeySequence &shortcut, Args&&...args)
+ {
+ QAction *result = addAction(text, shortcut);
+ connect(result, &QAction::triggered, std::forward<Args>(args)...);
+ return result;
+ }
+ template <typename...Args, typename = compatible_action_slot_args<Args...>>
+ QAction *addAction(const QIcon &icon, const QString &text, const QKeySequence &shortcut, Args&&...args)
+ {
+ QAction *result = addAction(icon, text, shortcut);
+ connect(result, &QAction::triggered, std::forward<Args>(args)...);
+ return result;
+ }
+#endif // QT_CONFIG(shortcut)
+#endif // QT_NO_ACTION
QWidget *parentWidget() const;