如何从qmljavascript构建Qt快速对象?

如何从qmljavascript构建Qt快速对象?,javascript,qt,qml,Javascript,Qt,Qml,这似乎微不足道,但我在互联网上找不到答案 我有一些QML代码,其中我有一些JavaScript代码,通过数组枚举,并为数组中的每个项创建一个按钮。我需要能够在JavaScript中初始化Button对象,但是运行var btn=new Button()会导致类型错误 如何在运行时创建Qt Quick对象?Qml提供了许多方法 使用中继器(或根据需要使用其他基于模型的实例化器,如列表视图,实例化器),其模型可以是数组: Row { Repeater { id: repeat

这似乎微不足道,但我在互联网上找不到答案

我有一些QML代码,其中我有一些JavaScript代码,通过数组枚举,并为数组中的每个项创建一个按钮。我需要能够在JavaScript中初始化Button对象,但是运行
var btn=new Button()
会导致类型错误


如何在运行时创建Qt Quick对象?

Qml提供了许多方法

使用
中继器
(或根据需要使用其他基于模型的实例化器,如
列表视图
实例化器
),其模型可以是数组:

Row {
    Repeater {
        id: repeater
        delegate: Button {
            text: modelData
        }

        Component.onCompleted: repeater.model = ["button1", "button2"] // JS array
    }
}
如果数组比这更复杂,则可以将数组解析为ListModel:

Row {
    Repeater {
        id: repeater1
        model: ListModel { }
        delegate: Button {
            text: model.myText
        }

        Component.onCompleted: {
            let array = ["button1", "button2"]
            for (let i = 0; i < array.length; i++) {
                repeater1.model.append({myText: array[i]})
            }
        }
    }
}
行{
中继器{
id:repeater1
模型:ListModel{}
代表:按钮{
text:model.myText
}
Component.onCompleted:{
让数组=[“按钮1”,“按钮2”]
for(设i=0;i
正如JarMan所建议的,在JS中动态创建按钮(有许多方法可以实现此目的,如图所示):

行{
Component.onCompleted:{
让数组=[“按钮1”,“按钮2”]
for(设i=0;i
所有这些例子都会产生相同的结果:


您正在寻找动态对象创建。这些文件都是。谢谢你的回答。我还有一个问题:如果我想把按钮的大小调整到,比如说,家长大小的三分之一,我该怎么做呢?我修正了它。这与我的按钮的父控件试图以一种奇怪的方式排列它们有关。
Row {
    Component.onCompleted: {
        let array = ["button1", "button2"]
        for (let i = 0; i < array.length; i++) {
            let newButton = buttonComponent.createObject(this, {})
            newButton.text = array[i]
        }
    }

    Component {
        id: buttonComponent

        Button { }
    }
}