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