【问题标题】:QML UnitTest missing C++ context propertyQML UnitTest 缺少 C++ 上下文属性
【发布时间】:2016-01-09 03:20:47
【问题描述】:
【问题讨论】:
标签:
qt
unit-testing
qml
qtquick2
qqmlapplicationengine
【解决方案1】:
如果您的模块依赖于根上下文属性,您应该考虑使用 QQmlEngineExtensionPlugin 为 QML 创建一个 c++ 插件
Creating C++ Plugins for QML
如果您查看实现,则需要重新实现
以下函数:
void initializeEngine(QQmlEngine *engine, const char *uri) override;
正如文档所说:
使用引擎从 uri 初始化扩展。例如,这里的应用程序插件可能会向 QML 公开一些数据或对象,作为引擎根上下文的上下文属性。
在这个函数中你可以放置你需要的根上下文属性
void initializeEngine(QQmlEngine *engine, const char *uri) override
{
MyObject* object = new MyObject(engine->rootContext());
engine->rootContext()->setContextProperty("myProperty", object);
}
之后,您只需在 QML 文件中导入您的 QML 模块,其中定义了 TestCase,您无需使用任何主要函数来添加它
对象作为根上下文属性。
【解决方案2】:
编辑:
在 Qt 5.11 中,Qml UnitTesting 有了新的篇章。见章节
Executing C++ Before QML Tests.
上一个答案:
您可以通过将QML项传递给C++端来获取QQmlEngine的实例,您可以使用方法qmlEngine。
所以,你可以通过调用来设置上下文属性
qmlEngine(passedQmlItem)->rootContext()->setContextProperty("propertyName", propertyValue);