在我的qml中,我正在创建一个C ++组件对象,但无法弄清楚如何在创建对象时引用该对象。
这是创建OgreScene对象的qml:
MouseArea
{
anchors.fill: parent
function scene()
{
var scene = Qt.createQmlObject( "import Client.Plugin.Ogre 0.1; OgreScene{ id: pluginScene; engine: OgreEngine }", plugin );
console.log( "qml: init scene" );
pluginScene.init();
}
onClicked: scene()
}
当我跑步时,我得到:
Qt Debug: qml: init scene
Qt Warning: qrc:///client.qml:118: ReferenceError: pluginScene is not defined
我将此添加到内联qml:
import Client.Plugin.Ogre 0.1;
没有导入就无法找到对象定义。此导入已在qml文件中完成,因此看起来内联qml与其执行的文件位于不同的上下文中。
如何在与qml文件相同的上下文中创建c ++组件对象?
答案 0 :(得分:2)
我有一个可行的解决方案。而不是尝试加载内联的qml,加载器项可以用于动态管理项目。
以下是加载项目以响应鼠标点击的代码:
MouseArea
{
anchors.fill: parent
function changePlugin()
{
// unload previously loaded plugin
pluginLoader.sourceComponent = undefined;
// load new plugin
pluginLoader.sourceComponent = myPlugin;
}
onClicked: changePlugin()
}
在要加载的位置插入要加载的内容的定义:
Component
{
id: myPlugin
YourCustomPlugin
{
// do initialization when the object is loaded
// I call the init method of my plugin
Component.onCompleted: init();
}
}
Loader { id: pluginLoader; }