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?