c++ - Qt插槽和 C++11 lambda

  显示原文与译文双语对照的内容
0 0

我有个QAction项i 初始化类似于如下所示:

QAction* action = foo->addAction(tr("Some Action"));
connect(action, SIGNAL(triggered()), this, SLOT(onSomeAction()));

然后onSomeAction形式如下所示:

void MyClass::onSomeAction()
{
    QAction* caller = qobject_cast<QAction*>(sender());
    Q_ASSERT(caller != nullptr);
    // do some stuff with caller
}

它也能收到, caller另外我还可以用它还原对象正常。 然后我尝试了C++11方式来连接这些对象,就像下面这样:

connect(action, &QAction::triggered, [this]()
{
    QAction* caller = qobject_cast<QAction*>(sender());
    Q_ASSERT(caller != nullptr);
    // do some stuff with caller
});

但是 caller始终为null从而改变 Q_ASSERT触发器。 如何使用lambda来获取发送方?

时间:原作者:3个回答

0 0

最简单的答案是: 你不能。 或者说,你不希望( 或需要) 来使用 ! sender(). 只捕获并使用 action.

connect(action, &QAction::triggered, [action, this]() {
    // use action as you wish
    ...
}
原作者:
...