我在Qt / C++中有一个发布者/订阅者键值数据库类。订阅者可以通过传递键(字符串),其QObject指针和属性来进行连接。
每当订阅键的值更改时,订阅QObject的属性就会更改为新值。在Qt / C++中可以正常工作。

现在,我想在QML中进行查看。是否可以将QML传递给具有3个参数的C++对象:

  • QML对象
  • 的QObject指针
  • 属性作为字符串
  • DB-key作为字符串



  • 最好的解决方案是,好像该属性连接到另一个属性:
    Item{ myQmlProp: MyCppInst("myDBKey") }
    

    编辑
    当前有效的是此解决方案:
    Item{
       id:myqmlitem
       myQmlProp: MyCppInst("myDBKey","myQmlProp",myqmlitem)
    }
    

    或像这样:
    Item{
       id:myqmlitem
       Component.onCompleted:{
          MyCppPublisher.subscribe("myDBKey1","myQmlProp1",myqmlitem)
          MyCppPublisher.subscribe("myDBKey2","myQmlProp2",myqmlitem)
       }
    }
    

    与首选解决方案相比,我必须显式传递连接的属性名称和QML项目实例。没关系,非常感谢您的回答!
    我曾希望使用QML的this-Keyword,但已经了解到QML当前未定义它:-(

    最佳答案

    只需给对象一个id并将该id传递给函数,它将在C++方面变成QObject *。然后,您可以使用元系统按名称访问属性:

    // qml
    Item {
      id: someitem
      ...
      CppObj.cppFoo(someitem)
    }
    
    // c++
    void cppFoo(QObject * obj) {
      ...obj->property("myDBKey")...
    }
    

    引用也可以,例如children[index]

    关于c++ - 将QObject指针从QML对象传递到C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48704199/

    10-11 22:25
    查看更多