我有一个 QAction 项目,我初始化如下:
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
始终为空,因此是Q_ASSERT
触发器。如何使用 lambdas 获取发件人?