Conecte la señal QML a la ranura lambda C ++ 11 (Qt 5)
Conectar una señal QML a una ranura normal de C ++ es fácil:
// QML
Rectangle { signal foo(); }
// C++ old-style
QObject::connect(some_qml_container, SIGNAL(foo()), some_qobject, SLOT(fooSlot()); // works!
Sin embargo, no importa lo que intente, parece que no puedo conectarme a una ranura lambda de la función C ++ 11.
// C++11
QObject::connect(some_qml_container, SIGNAL(foo()), [=]() { /* response */ }); // fails...
QObject::connect(some_qml_container, "foo()", [=]() { /* response */ }); // fails...
Ambos intentos fallan con un error de firma de función (ninguna sobrecarga de QObject :: connect puede aceptar estos parámetros). Sin embargo, la documentación de Qt 5 implica que esto debería ser posible.
Desafortunadamente, los ejemplos de Qt 5 siempre conectan una señal de C ++ a una ranura lambda de C ++:
// C++11
QObject::connect(some_qml_container, &QMLContainer::foo, [=]() { /* response */ }); // works!
Esta sintaxis no puede funcionar para una señal QML, ya que la firma QMLContainer :: foo no se conoce en tiempo de compilación (y declarar QMLContainer :: foo a mano anula el propósito de usar QML en primer lugar).
¿Es lo que estoy tratando de hacer posible? Si es así, ¿cuál es la sintaxis correcta para la llamada QObject :: connect?