如何将 QML 中声明的信号连接到 C++ 方法或 lambda

问题描述

我在 QML 中声明了 Rectangle,如下所示:

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

我可以像下面那样将 myquickitemobject 的 QQuickItem 对象放入 C++ 中

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

问题:
如何将 QML 中的 signal doSomething 贴标连接到 C++ 中的函数或 lambda?
试图做类似下面的事情但不起作用..

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

解决方法

在你的类中声明一个像下面这样的插槽:

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()));

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...