繁体   English   中英

将QObject指针从QML对象传递到C ++

[英]Passing QObject pointer from a QML object to C++

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

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

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

最好的解决方案是,好像该属性连接到另一个属性:

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]

您可以做的是一个仅将dbkey作为参数的函数,然后返回一个QObject*并使用READ函数和NOTIFY信号公开Q_PROPERTY

这样,您只需要用notify信号告知值已更改,并且QML将自动调用read函数。

可以像Item{ myQmlProp: MyCppInst("myDBKey").value }

如果您在编译时知道db键,则可以直接在MyCppInst为每个键添加属性,或者如果在创建cpp类时知道它们,则可以将它们放在QQmlPropertyMap 用法是这样的: Item { myQmlProp: MyCppInst.myDbKey } (如果需要在QML方面保持动态,则可以使用MyCppInst["myDbKey"] )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM