其他qml文件中定义的ListElements(ListModel)?

发布于 2024-12-08 05:22:09 字数 698 浏览 5 评论 0原文

我有一个像这样定义的功能 ListModel :

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    ListElement { icon: "Images/2.png" }
}

问题是我想在单独的 qml 文件中定义 ListElement 但我真的不知道该怎么做...

我这样写了 qml :

//myWidget.qml
import QtQuick 1.0

ListElement {
    icon: "Images/X.png"
}

但我不知道如何在我的主文件中“调用”或“实例化”它...

我尝试过:

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    myWidget //qml file
}

和:

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    ListElement { myWidget }
}

两者都不起作用...

欢迎任何帮助,提前致谢。

I got a fonctionnal ListModel defined like this :

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    ListElement { icon: "Images/2.png" }
}

The thing is that I'd like to define ListElement in separate qml files but I really don't know how to do it...

I wrote the qml like this :

//myWidget.qml
import QtQuick 1.0

ListElement {
    icon: "Images/X.png"
}

But I don't know how to "invoke" or "instanciate" it in my main file...

I tried :

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    myWidget //qml file
}

and :

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    ListElement { myWidget }
}

Both doesn't work...

Any help with be welcomed, thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

兔姬 2024-12-15 05:22:09

我认为不可能将 ListElements 作为单独的文件。这是因为当您这样做时,您将隐式创建一个组件,其中包含您的内容(在本例中为 ListElement)。但是,ListModel 只能接受 ListElements 作为其子级,而不接受内部嵌套 ListElements 的组件。

然而,要动态定义模型项,您可以做的是声明一个 ListModel,然后通过一段 javascript 添加数据,例如在 Component.onCompleted 处理程序中。

如果您查看 ListModel 的 API,您会发现它有一个append() 方法等。
您可以将 JS 字典传递给此方法,它将向列表中添加一个新的 ListElement 并根据字典填充其属性。

示例:

import QtQuick 1.0

Rectangle {
    width: 360
    height: 360

    ListView {
        id:list
        anchors.fill: parent
        model: ListModel {
            ListElement { foo: "hello" }
        }
        delegate: Text {
            text: foo
            width: ListView.view.width
        }

        Component.onCompleted: {
            list.model.append({ "foo": "world" })
        }
    }
}

您的列表中将显示两个项目:“hello”和“world”

I don't think it's possible to have ListElements as separate files. This is because when you do that you are implicitly creating a Component, with your contents inside (in this case the ListElement). However the ListModel can only accept ListElements as its children, not Components with nested ListElements inside.

What you can do however to dynamically define your model items is to declare a ListModel, then add your data via a piece of javascript, for example in your Component.onCompleted handler.

If you look at the API for ListModel you will see it has an append() method, among others.
You can pass a JS dictionary to this method and it will add a new ListElement to the list and populate its properties according to the dictionary.

Example:

import QtQuick 1.0

Rectangle {
    width: 360
    height: 360

    ListView {
        id:list
        anchors.fill: parent
        model: ListModel {
            ListElement { foo: "hello" }
        }
        delegate: Text {
            text: foo
            width: ListView.view.width
        }

        Component.onCompleted: {
            list.model.append({ "foo": "world" })
        }
    }
}

Your list will appear with two items in it: "hello" and "world"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文