2

在我的 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++ 组件对象?

4

1 回答 1

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; }
于 2013-08-23T18:34:17.233 回答