2014-12-03 4 views
4

Это можно создавать компоненты QML из файлов с помощью Qt.createComponent(filename)Создание компонента QML из строки

Можно создать объект QML из строк с помощью Qt.createQmlObject(string)

можно создавать компоненты QML из кода с помощью Component {...}

Но возможно ли создать компонент QML из строки? Я имею в виду, не пытаясь сохранить его как временный файл только ради использования Qt.createComponent(filename)?

EDIT: Просто чтобы прояснить, у меня уже есть компоненты в этом примере форме:

import QtQuick 2.0 

Rectangle { 
    width: 100 
    height: 100 
    color: "red" 
} 

Так мне нужно создать компонент из этой строки без инстанцирования его. Я не могу просто обернуть строку в "Component {" + string + "}", потому что импорт не может быть объявлен внутри компонента. Одним из решений было бы использовать комплексный синтаксический анализ для вставки компонента непосредственно перед первым элементом и после импорта, но это не делает меня самым элегантным решением.

+0

Вы говорите себе о создании компонента из строки с помощью 'Qt.createQmlObject (string)'. Так в чем ваш вопрос? – folibis

+1

@folibis - нет, проверьте, что снова я говорю «объект QML», который не совпадает с «компонентом QML», этот компонент является прототипом для объекта, но вы не можете использовать объект в месте, где требуется компонент , –

+0

см. Мой ответ ниже – folibis

ответ

1

Qt.createQmlObject(string). Он создает объект, а не прототип.

Window { 
    id: mainWindow 
    visible: true 
    width: 600 
    height: 400 
    Component.onCompleted: { 
     var str = ' 
     import QtQuick 2.3; 
     Component { 
      Text { 
       text: "Hello, world!"; 
       anchors.fill: parent; 
       horizontalAlignment: Text.AlignHCenter; 
       verticalAlignment: Text.AlignVCenter; 
      } 
     }'; 
     var component = Qt.createQmlObject(str,mainWindow); 
     var object = component.createObject(mainWindow); 
    } 
} 
+1

Мне нужно создать компонент из строки, а не объекта. –

+0

Ehm, см. Мой обновленный ответ – folibis

+0

Проблема в том, что у меня уже есть строки компонентов с импортом, но без оболочки 'Component'. Я не могу добавить 'Компонент {' и добавить '}', потому что это нарушает код, импорт не может быть выполнен в 'Компонент' –

Смежные вопросы