Как связать сигнал, объявленный в QML, с методом C++ или лямбда [дубликат]

У меня Rectangle объявлен в QML, как показано ниже:

      Rectangle {
        objectName: "myquickitemobject"
        signal doSomething
        MouseArea {
            anchors.fill: parent
            onClicked: { 
                doSomething() 
            }
        }
    }

Я могу получить объект QQuickItem из myquickitemobject в C++, как показано ниже

      // main.cpp
QQuickItem *my_quickitem = m_qml_item_root->findChild<QQuickItem*>("myquickitemobject");

Вопрос:
Как мне подключиться signal doSomethingпереводится в QML в функцию или лямбда в C++?
Попытка сделать что-то вроде ниже, но не работает ...

      QObject::connect(my_quickitem, doSomething, []{
    std::cout << "Signal doSomething called" << std::endl;
});

1 ответ

Объявите в своем классе слот, как показано ниже:

      Q_SLOT void DoSomething() {
    std::cout << "Do something" << std::endl;
}

А затем соедините их, как показано ниже:

      QQuickItem *my_quickitem = m_qml_item_root->findChild<QQuickItem*>("myquickitemobject");
QObject::connect(my_quickitem, SIGNAL(doSomething()), this, SLOT(DoSomething()));
Другие вопросы по тегам