Qt Slots und C ++ 11 Lambda

Ich habe ein QAction-Objekt, das ich folgendermaßen initialisiere:

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

Und dann sieht onSomeAction ungefähr so ​​aus:

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

    // do some stuff with caller
}

Das funktioniert gut, ich verstehe dascaller Objekt zurück und ich kann es wie erwartet verwenden. Dann versuche ich die C ++ 11-Methode, um das Objekt wie folgt zu verbinden:

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

    // do some stuff with caller
});

Abercaller ist immer null und damit dieQ_ASSERT löst aus. Wie kann ich Lambdas verwenden, um den Absender zu erhalten?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage