从字符串创建QML组件

时间:2014-12-03 11:17:34

标签: string qt components qml qtquick2

可以使用Qt.createComponent(filename)

从文件创建QML组件

可以使用Qt.createQmlObject(string)

从字符串创建QML对象

可以通过Component {...}

从代码创建QML组件

但是可以从字符串创建QML组件吗?我的意思是,为了使用Qt.createComponent(filename)而没有尽力将其保存为临时文件?

编辑:为了澄清,我已经有了这个示例表单中的组件:

import QtQuick 2.0

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

所以我需要从该字符串创建一个组件而不实例化它。我不能简单地将字符串包装在"Component {" + string + "}"中,因为无法在组件内声明导入。一种解决方案是使用复杂的解析来在第一个元素之前和导入之后插入组件,但它不会让我成为最优雅的解决方案。

1 个答案:

答案 0 :(得分: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);
    }
}