c++ - 获取指向已注册 QML 类型的指针

标签 c++ qt qml qtquick2 qtcore

如果我注册了类型

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”实例。如果需要,您可以将其传递给代码库的其他部分。

关于c++ - 获取指向已注册 QML 类型的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23032808/

相关文章:

c++ - 在 Visual Studio 项目中本地复制 native 依赖项

c# - java注释与C#属性相同吗? C++ 中的等价物是什么?

c++ - 命名空间或类中的实用程序函数?

qt - 使用 QML 在 tableview 中居中一个复选框

qt - 如何检查 QML 中的颜色是否相等?

c++ - Qt中的缓冲区溢出错误?

c++ - std::set::insert() 可以调用赋值运算符吗?

qt - 在新 Mac 上启动并运行 Qt5

c++ - 如何向 QWidget 添加插槽?

c++ - 动态创建网格布局并在 Qt 中管理它