javascript - 如何在 QML 中动态添加项目到 VisualItemModel?

标签 javascript qt listview qml

我有一个基于文本框的自定义 qml 元素。我希望每当用户按下 VisualItemModel 中的最后一个文本框时,都会自动添加一个新的文本框。有一种方法可以使用 ListModel(使用 append())执行此操作,但不能使用 VisualItemModel。

如何做到这一点?甚至 Javascript 也会有所帮助。

最佳答案

似乎 VisualItemModel 并不是真正为动态管理而设计的——它是一个纯静态结构。

VisualItemModel 是一种懒惰且笨拙的解决方案,用于获取 ListView 以显示不同的元素,将数据和 UI 塞在一起。如果这是重点,您可以通过使用标准 ListModelListView 轻松实现:

ListView {
    anchors.fill: parent
    model: mod
    delegate: Loader {
        source: name + ".qml"
    }
}

然后你可以像这样附加到模型:

mod.append({"name" : "ItemName"})

然后在 ListView 中,委托(delegate)将为每个列表条目创建适当的元素。

如果您不希望项目有单独的来源,您可以将不同的项目包装在 ComponentLoader 中,而不是 source 设置 sourceComponent: name:

Component {
    id: c2
    Rectangle {
        width: 200
        height: 100
        color: "blue"
    }
}

....
mod.append({"name" : c2})

但在您的情况下,您似乎不需要不同的元素来拥有不同的 UI,因此您实际上也不需要 VisualItemModel。只需让 View 委托(delegate)一个文本框并附加到标准 ListModel,您就会得到另一个文本框。

关于javascript - 如何在 QML 中动态添加项目到 VisualItemModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29049854/

相关文章:

javascript - 嵌套foreach/forloops,循环遍历JSON提取值

javascript - 双击在 JQuery FullCalendar 上添加约会

wpf - WPf 中 ListView 的平铺 View

java - 将项目添加到 Android 中的 ListView 时应用程序崩溃

javascript - 我无法在 v-for 中使用 v-bind click

javascript - 如何在数据表的列中创建状态 "active"或 "expired"?

python - 如何使用 pyQT 复制此 tkinter 滚动行为?

c++ - Linux 操作系统上的 Qt Access Webcam 无需下载任何包

qt - 忽略 QWidget 单击事件并将其传播到操作系统

android - 如何在Kotlin中将listView转换为RecyclerView