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!
QMLContainer :: fooシグネチャはコンパイル時に認識されないため、この構文はQMLシグナルでは機能しません(QMLContainer :: fooを手動で宣言すると、そもそもQMLを使用する目的が無効になります)。
私がやろうとしていることは可能ですか?もしそうなら、QObject :: connect呼び出しの正しい構文は何ですか?