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