Verbinden Sie das QML-Signal mit dem C ++ 11-Lambda-Steckplatz (Qt 5)

Das Anschließen eines QML-Signals an einen regulären C ++ - Slot ist einfach:

// QML
Rectangle { signal foo(); }

// C++ old-style
QObject::connect(some_qml_container, SIGNAL(foo()), some_qobject, SLOT(fooSlot()); // works!

Unabhängig davon, was ich versuche, kann ich anscheinend keine Verbindung zu einem C ++ 11-Lambda-Funktionssteckplatz herstellen.

// C++11
QObject::connect(some_qml_container, SIGNAL(foo()), [=]() { /* response */ }); // fails...
QObject::connect(some_qml_container, "foo()", [=]() { /* response */ }); // fails...

Beide Versuche schlagen mit einem Funktionssignaturfehler fehl (keine QObject :: connect-Überladung kann diese Parameter akzeptieren). Die Qt 5-Dokumentation impliziert jedoch, dass dies möglich sein sollte.

Leider verbinden Qt 5-Beispiele immer ein C ++ - Signal mit einem C ++ - Lambda-Slot:

// C++11
QObject::connect(some_qml_container, &QMLContainer::foo, [=]() { /* response */ }); // works!

Diese Syntax kann für ein QML-Signal nicht verwendet werden, da die QMLContainer :: foo-Signatur zur Kompilierungszeit nicht bekannt ist (und die Deklaration von QMLContainer :: foo von Hand den Zweck der erstmaligen Verwendung von QML zunichte macht.)

Ist das, was ich versuche, möglich? Wenn ja, wie lautet die korrekte Syntax für den Aufruf von QObject :: connect?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage