Подключение QML-сигнала к регулярному слоту С++ очень просто:
// QML
Rectangle { signal foo(); }
// C++ old-style
QObject::connect(some_qml_container, SIGNAL(foo()), some_qobject, SLOT(fooSlot()); // works!
Однако, что бы я ни старался, я не могу подключиться к слоту лямбда-функции С++ 11.
// C++11
QObject::connect(some_qml_container, SIGNAL(foo()), [=]() { /* response */ }); // fails...
QObject::connect(some_qml_container, "foo()", [=]() { /* response */ }); // fails...
Обе попытки терпят неудачу с ошибкой сигнатуры функции (никакая перегрузка QObject:: connect не может принимать эти параметры). Однако в документации по Qt 5 это должно быть возможно.
К сожалению, примеры Qt 5 всегда подключают сигнал С++ к слоту лямбда С++:
// C++11
QObject::connect(some_qml_container, &QMLContainer::foo, [=]() { /* response */ }); // works!
Этот синтаксис не может работать для сигнала QML, поскольку подпись QMLContainer:: foo неизвестна во время компиляции (и объявление QMLContainer:: foo вручную поражает цель использования QML в первую очередь.)
Я пытаюсь сделать это? Если да, то какой правильный синтаксис для вызова QObject:: connect?