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?