engine.rootContext()->setContextProperty和qmlregister区别
时间: 2024-02-28 14:55:15 浏览: 19
`engine.rootContext()->setContextProperty` 和 `qmlRegisterType` 都是在 QML 中使用 C++ 类型的方式之一,但具体用途和实现方式不同。
`engine.rootContext()->setContextProperty` 用于将 C++ 中的对象注册到 QML 的上下文中,这样在 QML 中就可以直接使用该对象了。具体来说,`setContextProperty` 方法接受两个参数:第一个参数是一个字符串,表示该对象在 QML 中的名称;第二个参数是一个指向该对象的指针。例如:
```cpp
MyClass myObject;
engine.rootContext()->setContextProperty("myObject", &myObject);
```
然后在 QML 中就可以像这样使用 `myObject`:
```qml
Text {
text: myObject.someProperty
}
```
`qmlRegisterType` 用于将 C++ 类型注册为 QML 中的新类型,这样就可以在 QML 中创建该类型的对象了。具体来说,`qmlRegisterType` 方法接受三个参数:第一个参数是该类型在 QML 中的名称;第二个参数是该类型的命名空间;第三个参数是该类型的版本号。例如:
```cpp
qmlRegisterType<MyClass>("MyModule", 1, 0, "MyClass");
```
然后在 QML 中就可以像这样使用 `MyClass`:
```qml
MyClass {
someProperty: someValue
}
```
总之,`setContextProperty` 适用于将已有的 C++ 对象注册到 QML 中,而 `qmlRegisterType` 适用于将 C++ 类型注册为 QML 中的新类型。两者的具体用途和实现方式不同,但都能让我们在 QML 中使用 C++ 类型。