Conecte o sinal QML ao slot lambda C ++ 11 (Qt 5)
Conectar um sinal QML a um slot C ++ regular é fácil:
// QML
Rectangle { signal foo(); }
// C++ old-style
QObject::connect(some_qml_container, SIGNAL(foo()), some_qobject, SLOT(fooSlot()); // works!
No entanto, não importa o que eu tente, não consigo me conectar a um slot de função lambda do C ++ 11.
// C++11
QObject::connect(some_qml_container, SIGNAL(foo()), [=]() { /* response */ }); // fails...
QObject::connect(some_qml_container, "foo()", [=]() { /* response */ }); // fails...
Ambas as tentativas falham com um erro de assinatura de função (nenhuma sobrecarga QObject :: connect pode aceitar esses parâmetros). No entanto, a documentação do Qt 5 implica que isso deveria ser possível.
Infelizmente, os exemplos do Qt 5 sempre conectam um sinal C ++ a um slot lambda C ++:
// C++11
QObject::connect(some_qml_container, &QMLContainer::foo, [=]() { /* response */ }); // works!
Esta sintaxe não pode funcionar para um sinal QML, já que a assinatura QMLContainer :: foo não é conhecida em tempo de compilação (e declarar QMLContainer :: foo manualmente derrota o propósito de usar QML em primeiro lugar).
O que estou tentando fazer é possível? Em caso afirmativo, qual é a sintaxe correta para a chamada QObject :: connect?