正在获取指向已注册QML类型的指针

Getting pointer to registered QML type

本文关键字:QML 类型 指针 注册 获取 取指      更新时间:2023-10-16

如果我有类型注册的

qmlRegisterType<MyClass>("com.sample.myclass", 1, 0, "myClass");

我想得到指针到注册类型,即

MyClass* registeredClass = **getQmlRegisteredType<MyClass>(1, 0)**;

这可能吗?我之所以想要它,是因为我想在某个时间设置同一对象的一些属性,这样当qml查看它时,它就会知道。另一个原因是我想设置上下文属性,这样我就不必这么做了:

MyClass {
    id: cls
}
....
cls.someMethod

我只做

((QQmlContext*)viewer.rootContext())->setContextProperty("cls", 
    (QObject*)pointerToMyClass); // Pardon my C style cast

感谢

我个人不会在QML目录中声明该类。我会通过上下文属性系统从C++公开一个对象实例,然后你也可以在C++端访问该对象,无论你想对它做什么。

如果我是你,我会写一些伪代码:

MyClass myClass;
QQmlContext *ctxt = view->rootContext();
ctxt->setContextProperty("myClass", &myClass);

请注意,您正在进行的所有强制转换都是不必要的。完成此操作后,您就可以访问"myClass"实例了。如果需要,您可以将它传递给代码库的其他部分。