将 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!
此语法不适用于 QML 信号,因为 QMLContainer::foo 签名在编译时是未知的(并且手动声明 QMLContainer::foo 首先会破坏使用 QML 的目的。)
我正在尝试做的事情可能吗?如果是这样, QObject::connect 调用的正确语法是什么?