Qt/QML qmlRegisterType vs. setContextProperty (difference)
Qt/QML qmlRegisterType vs. setContextProperty (difference)
在Qt/QML应用程序中(此代码通常驻留在QtCreator项目的main.cpp
中),下面几种将c++类暴露给QML的方法有什么区别:
qmlRegisterType<UePeopleModel>("com.example",
1,
0,
"UePeopleModel");
和
engine.rootContext()->setContextProperty("uePeopleModel",
uePeopleModel);
?
qmlRegisterType :
"有时qobject派生类可能需要在QML类型系统中注册,但不是作为可实例化类型注册。"
如果您希望在一个或多个具有不同属性的qml文件中重用qobject派生类,请使用qmlRegisterType。QML负责这个寄存器类的初始化。
查看更多帮助。从c++定义QML类型
setContextProperty:
使用setContextProperty,当你想使用一个全局类来访问或从QML。这里你需要在使用setContextProperty()之前创建这个类对象。
注意:由于在QML中求值的所有表达式都是在特定的上下文中求值的,如果上下文被修改,该上下文中的所有绑定都将被重新求值。因此,在应用程序初始化之外应该小心使用上下文属性,因为这可能会导致应用程序性能下降。
查看更多帮助。在QML中嵌入c++对象
在第一个中,您声明了可用于在QML中实例化的c++类型,在第二个中,您声明了相同类型的全局变量"uePeopleModel"
相关文章:
- Difference in displaying cv2 Mat
- Difference atexit() and at_quick_exit()
- Difference Between c.foo() and c.parent::foo()
- FFMPEG:av_rescale_q - time_base difference
- Difference between boost::thread and std::thread
- x86-64 movl and cmpl difference
- Fill the difference C++ ==
- Difference between QScreen::width() and QScreen::deviceWidth
- Boost.Spirit.Qi:在解析时动态创建"difference"解析器
- difference between & and * declaration
- Difference between SomeClass **ptr; and SomeClass *ptr;
- Difference between add_lvalue_reference_t<T> and T&
- Qt/QML qmlRegisterType vs. setContextProperty (difference)
- Difference: cin.getline() and getline(cin, st)
- ::tolower vs std::tolower difference
- Difference in if()?
- Difference in two for nested loops.(C++)