gpt4 book ai didi

qml - 为什么使用 QAbstractTableModel 而不是 QAbstractListModel?

转载 作者:行者123 更新时间:2023-12-05 03:13:22 31 4
gpt4 key购买 nike

我已经在 QML 中使用 TableViewColumn 实现了 TableView,其中的一些角色如下:

TableView {
TableViewColumn {
role: "role1"
title: "Role1"
}
...
}

它绑定(bind)到一个 C++ 模型,继承自 QAbstractListModel 并定义了所有角色,我发现它非常自然。

但是,我发现还存在 QAbstractTableModel,它允许使用列索引。我知道我可能应该使用它,但我更喜欢角色而不是列索引

有人可以解释一下使用 QAbstractTableModel 有什么好处吗?

最佳答案

除非您使用的是 Qt Widgets 还是 Qt Quick,否则没有。

Qt 通常有一个 Model/View architecture这种架构可以与 Qt Widgets Qt Quick 一起使用。两者的概念相同,但两者的 View 类不同,尤其是 TableView 。

在 Qt Widgets 中你有 QTableView ,此 View 期望模型数据布置在表中(即行和列),因此将使用 QAbstractTableModel 的子类为其提供此数据。

但是在 Qt Quick 中 TableView类型不是 QTableView 类的一对一副本。事实上,它完全不同,它希望提供给它的任何模型中的数据都放在一个列表中(即行,但只有 1 列)不是一个表。为了实现类似数据排列的表格,TableView 类型使用列的角色。

因此,在 Qt Widgets 中,可以使用 QTableView 类并使用 QAbstractTableModel 的子类来为其提供表格布局(行和列)中的数据,但在 Qt Quick 中,可以使用 TableView 类型并使用子类QAbstractListModel 以列表布局(行和仅 1 列)为其提供数据,而不是仅在每个单元格中显示 Qt::DisplayRole,可以声明在 TableView 的每一列中使用的不同角色。

与其说一个比另一个更有值(value),还不如说一个 View 类型/类期望数据的格式与另一个不同。

如果你坐在那里认为 Qt 已经把这个不必要地复杂化了,那就知道 TableView 是奇怪的鸭子;如果您谈论的是 ListView ,则 QListView (Qt Widgets) 类和 ListView (Qt Quick) 类型实际上在行为上几乎是一对一的,它们都可以使用相同的模型互换。也就是说,您可以将您的模型放在一个共享库中,并在 Qt Quick 或 Qt Widgets 应用程序中使用它而无需修改。应该注意的是,QTableView/TableView 也可以实现相同的效果,但模型必须支持这两种期望,将数据显示为包含行和列的表格以及包含行和角色的列表。

我希望这能回答您的问题。

直到下一次富有想象力地思考和创造性地设计

关于qml - 为什么使用 QAbstractTableModel 而不是 QAbstractListModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30436829/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com