QMenuBar: Add overloads of addAction() using Qt 5 signals and slots
[ChangeLog][QtWidgets][QMenuBar] Add overloads of addAction() using Qt 5 signals and slots Change-Id: Ief21974213b80111f0ca87df490eb72dd6b9c9b9 Reviewed-by: Martin Smith <martin.smith@qt.io>bb10
parent
f99d2b21b8
commit
79d3351855
|
|
@ -780,6 +780,42 @@ QAction *QMenuBar::addAction(const QString &text, const QObject *receiver, const
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn template<typename Obj, typename PointerToMemberFunctionOrFunctor>
|
||||
QAction *QMenuBar::addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)
|
||||
|
||||
\since 5.11
|
||||
|
||||
\overload
|
||||
|
||||
This convenience function creates a new action with the given \a
|
||||
text. The action's triggered() signal is connected to the
|
||||
\a method of the \a receiver. The function adds the newly created
|
||||
action to the menu's list of actions and returns it.
|
||||
|
||||
QMenuBar takes ownership of the returned QAction.
|
||||
|
||||
\sa QWidget::addAction(), QWidget::actions()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn template<typename Functor>
|
||||
QAction *QMenuBar::addAction(const QString &text, Functor functor)
|
||||
|
||||
\since 5.11
|
||||
|
||||
\overload
|
||||
|
||||
This convenience function creates a new action with the given \a
|
||||
text. The action's triggered() signal is connected to the
|
||||
\a functor. The function adds the newly created
|
||||
action to the menu's list of actions and returns it.
|
||||
|
||||
QMenuBar takes ownership of the returned QAction.
|
||||
|
||||
\sa QWidget::addAction(), QWidget::actions()
|
||||
*/
|
||||
|
||||
/*!
|
||||
Appends a new QMenu with \a title to the menu bar. The menu bar
|
||||
takes ownership of the menu. Returns the new menu.
|
||||
|
|
|
|||
|
|
@ -67,6 +67,32 @@ public:
|
|||
QAction *addAction(const QString &text);
|
||||
QAction *addAction(const QString &text, const QObject *receiver, const char* member);
|
||||
|
||||
#ifdef Q_QDOC
|
||||
template<typename Obj, typename PointerToMemberFunctionOrFunctor>
|
||||
QAction *addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method);
|
||||
template<typename Functor>
|
||||
QAction *addAction(const QString &text, Functor functor);
|
||||
#else
|
||||
// addAction(QString): Connect to a QObject slot / functor or function pointer (with context)
|
||||
template<typename Obj, typename Func1>
|
||||
inline typename std::enable_if<!std::is_same<const char*, Func1>::value
|
||||
&& QtPrivate::IsPointerToTypeDerivedFromQObject<Obj*>::Value, QAction *>::type
|
||||
addAction(const QString &text, const Obj *object, Func1 slot)
|
||||
{
|
||||
QAction *result = addAction(text);
|
||||
connect(result, &QAction::triggered, object, std::move(slot));
|
||||
return result;
|
||||
}
|
||||
// addAction(QString): Connect to a functor or function pointer (without context)
|
||||
template <typename Func1>
|
||||
inline QAction *addAction(const QString &text, Func1 slot)
|
||||
{
|
||||
QAction *result = addAction(text);
|
||||
connect(result, &QAction::triggered, std::move(slot));
|
||||
return result;
|
||||
}
|
||||
#endif // !Q_QDOC
|
||||
|
||||
QAction *addMenu(QMenu *menu);
|
||||
QMenu *addMenu(const QString &title);
|
||||
QMenu *addMenu(const QIcon &icon, const QString &title);
|
||||
|
|
|
|||
|
|
@ -153,6 +153,8 @@ private slots:
|
|||
|
||||
void platformMenu();
|
||||
|
||||
void addActionQt5connect();
|
||||
|
||||
protected slots:
|
||||
void onSimpleActivated( QAction*);
|
||||
void onComplexActionTriggered();
|
||||
|
|
@ -1595,6 +1597,42 @@ void tst_QMenuBar::platformMenu()
|
|||
QVERIFY(menu->platformMenu());
|
||||
}
|
||||
|
||||
class TestObject : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
bool flag = false;
|
||||
void setFlag()
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
};
|
||||
|
||||
void tst_QMenuBar::addActionQt5connect()
|
||||
{
|
||||
bool flag = false;
|
||||
auto functor = [&flag](){ flag = true; };
|
||||
|
||||
TestObject obj;
|
||||
|
||||
QMenuBar menuBar;
|
||||
|
||||
auto action1 = menuBar.addAction(QStringLiteral("1"), &obj, &TestObject::setFlag);
|
||||
auto action2 = menuBar.addAction(QStringLiteral("2"), functor);
|
||||
|
||||
action1->activate(QAction::Trigger);
|
||||
action2->activate(QAction::Trigger);
|
||||
|
||||
QVERIFY(obj.flag);
|
||||
QVERIFY(flag);
|
||||
|
||||
flag = false;
|
||||
|
||||
auto action3 = menuBar.addAction(QStringLiteral("3"), this, functor);
|
||||
action3->activate(QAction::Trigger);
|
||||
QVERIFY(flag);
|
||||
}
|
||||
|
||||
void tst_QMenuBar::slotForTaskQTBUG53205()
|
||||
{
|
||||
QWidget *parent = taskQTBUG53205MenuBar->parentWidget();
|
||||
|
|
|
|||
Loading…
Reference in New Issue