代码之家  ›  专栏  ›  技术社区  ›  TheWaterProgrammer

如何从C++侧链接到QML项的OnCutter事件

  •  0
  • TheWaterProgrammer  · 技术社区  · 6 年前

    脚本:
    Qt应用程序 它继续运行 第5.9.4节 商业版。它是一个 QtQuick QML 基于运行在上的应用程序 网间网操作系统 安卓 .

    质量管理 UI上的项如下所示:

    SomeItem {
        text: qsTr("Some Item")
        objectName: "someitem"
        visible: false
        onClicked: {
            console.log("Some item was clicked")
        }
    }
    

    我有一个C++函数,可以很容易地控制属性 SomeItem .

    void MyCppClass::Func() {
    
        QQuickItem *someItem = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("someitem");
        someItem->setVisible(true); // this works
    
        // How to listen to someItem's onClick event here
    }
    

    问题:
    someItem 某物 从C++本身。我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  1
  •   eyllanesc Yonghwan Shin    6 年前

    用于交互的方法在一般情况下可能是危险的,因为项目的生命周期依赖于QML,所以请确保它不会发生。转到您的请求,我假设MyCppClass继承自QObject或子类,您必须创建一个插槽并使用旧的连接语法:

    class MyCppClass: public QObject
    {
    ...
    private slots:
        void on_clicked();
    ...
    };
    

    *.cpp文件

    void MyCppClass::Func() {
    
        QQuickItem *someItem = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("someitem");
        if(!someItem)
            return;
        someItem->setVisible(true); // this works
        connect(someItem, SIGNAL(clicked()), this, SLOT(on_clicked()));
    
    }
    
    void MyCppClass::on_clicked(){
        qDebug()<<"on clicked";
    }