Qt Slots i C ++ 11 lambda

Mam element QAction, który inicjuję w następujący sposób:

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

A potem onSomeAction wygląda tak:

void MyClass::onSomeAction()
{
    QAction* caller = qobject_cast<QAction*>(sender());
    Q_ASSERT(caller != nullptr);

    // do some stuff with caller
}

To działa dobrze, dostajęcaller sprzeciwiam się i jestem w stanie użyć go zgodnie z oczekiwaniami. Następnie próbuję połączyć się z obiektem w C ++ 11 w następujący sposób:

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

    // do some stuff with caller
});

Alecaller jest zawsze zerowy, a więcQ_ASSERT wyzwalacze. Jak mogę użyć lambd do uzyskania nadawcy?

questionAnswers(2)

yourAnswerToTheQuestion