Połącz sygnał QML z gniazdem lambda C ++ 11 (Qt 5)

Podłączenie sygnału QML do zwykłego slotu C ++ jest łatwe:

// QML
Rectangle { signal foo(); }

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

Jednak bez względu na to, co próbuję, nie mogę się połączyć z gniazdem funkcji lambda C ++ 11.

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

Obie próby kończą się niepowodzeniem z błędem podpisu funkcji (brak przeciążenia QObject :: connect może zaakceptować te parametry). Jednak dokumentacja Qt 5 sugeruje, że powinno to być możliwe.

Niestety, przykłady Qt 5 zawsze łączą sygnał C ++ z gniazdem lambda C ++:

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

Ta składnia nie może działać w przypadku sygnału QML, ponieważ sygnatura QMLContainer :: foo nie jest znana w czasie kompilacji (i zadeklarowanie, że QMLContainer :: foo ręcznie usuwa cel używania QML w pierwszej kolejności).

Czy to, co próbuję zrobić, jest możliwe? Jeśli tak, jaka jest poprawna składnia wywołania QObject :: connect?

questionAnswers(3)

yourAnswerToTheQuestion