[英]Passing QObject pointer from a QML object to C++
我在Qt / C ++中有一个发布者/订阅者键值数据库类。 订阅者可以通过传递键(字符串),其QObject指针和属性来进行连接。 每当订阅的键的值更改时,订阅的QObject的属性就会更改为新值。 在Qt / C ++中可以正常工作。
现在,我想在QML中进行查看。 是否可以将QML传递给具有3个参数的对象的C ++:
?
最好的解决方案是,好像该属性连接到另一个属性:
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.