Ho un oggetto che QAction inizializzo come segue:Qt Slot e C++ 11 lambda
QAction* action = foo->addAction(tr("Some Action"));
connect(action, SIGNAL(triggered()), this, SLOT(onSomeAction()));
E poi onSomeAction sembra qualcosa di simile:
void MyClass::onSomeAction()
{
QAction* caller = qobject_cast<QAction*>(sender());
Q_ASSERT(caller != nullptr);
// do some stuff with caller
}
Questo funziona bene, ho la caller
oggetto indietro e sono in grado di usarlo come previsto. Poi provo modo C++ 11 per collegare l'oggetto come ad esempio:
connect(action, &QAction::triggered, [this]()
{
QAction* caller = qobject_cast<QAction*>(sender());
Q_ASSERT(caller != nullptr);
// do some stuff with caller
});
Ma caller
è sempre nullo e quindi i Q_ASSERT
trigger. Come posso usare lambda per ottenere il mittente?
duplicati di http://stackoverflow.com/questions/14717755/how-to-a ccess-qobjectsender-in-a-c-lambda –
@FrankOsterfeld: Non proprio, dato che qui non hai bisogno di alcuna ginnastica come nel presunto duplicato. Qui è una questione banale catturare il mittente esplicitamente disponibile dato a 'connect' come argomento. –