Подключите сигнал 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?

Ответы на вопрос(3)

Ваш ответ на вопрос