Динамический объект QtQuick в другом контексте

В моем qml я создаю объект компонента C ++, но не могу понять, как ссылаться на объект после его создания.

Вот qml для создания объекта OgreScene:

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 находится в отдельном контексте от файла, из которого он выполняется.

Как я могу создать объект компонента C ++ в том же контексте, что и мой файл qml?

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; }
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]