将 QML 信号连接到常规的 C++ 槽很容易:
// QML
Rectangle { signal foo(); }
// C++ old-style
QObject::connect(some_qml_container, SIGNAL(foo()), some_qobject, SLOT(fooSlot()); // works!
无论我尝试什么,似乎都无法连接到一个C++11 lambda函数槽。// 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++ lambda槽:
// C++11
QObject::connect(some_qml_container, &QMLContainer::foo, [=]() { /* response */ }); // works!
由于在编译时不知道QMLContainer::foo的签名(而手动声明QMLContainer::foo会失去使用QML的目的),因此此语法无法用于QML信号。
我正在尝试的事情是否可能?如果是,QObject::connect调用的正确语法是什么?