我有一个 C++ 插件系统,其中创建了 QQmlComponent 并在用户请求新插件实例时加载了 qml 文件。
目前我正在使用 setContextProperty() 来告诉 QML 正确初始化所需的 QObject。
mEngine->rootContext()->setContextProperty("controller", QVariant::fromValue(mController));
mComponent = new QQmlComponent(mEngine);
mComponent->loadUrl(QUrl{ "qrc:///MyPlugin.qml" });
问题是,在实例化第二个插件时,两者都将使用第二个插件的控制器,因为“控制器”在 QML 中是全局的。
Repeater {
model: controller.numEntries
有没有办法在本地设置上下文属性(仅适用于当前实例)?
我找到了使用 setProperty() 或 QQmlIncubator 和 setInitialState() 的解决方案,但它们似乎都需要一个已经从我的组件创建的对象。但在我的插件中,我只定义了组件,该组件通过 Loader 项加载到主应用程序中。因此,在尝试这些方法时,我总是在项目的副本中设置值,而不是在我的后端创建的那个。
如何访问在 QML 中创建的组件的属性?
mComponent->findChild<QQuickItem*>("controller");
即使我在 MyPlugin.qml 中定义了该属性,也不会给我任何结果。