- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在 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/
我想测试我已经实现的一些 QAbstractListModels,使用 Qt 实验室的 ModelTest 还是使用 QTestLib 进行我自己的单元测试更好。也有人可以指出 ModelTest 实
我正在使用 QAbstractListModel 将数据公开给 QML ListView。除此之外还使用了 QML SectionScroller,它使用 get 和 data 函数。 滚动一段时间后
我在尝试使用 Qt/QML 为我的应用程序开发数据模型时遇到问题。我已经使用了一个 QAbstractListModel 来将海关数据模型从 C++ 传递到 QML,它对简单模型(例如基于字符串和 b
我从 QAbstractListModel 派生了一个类 FeedItemViewModel。我已经实现了一种在列表模型中添加项目的方法,但我不知道如何更新具有特定 ID 的项目。 代码如下: voi
我有一个 QAbstractListModel 的子类,并用 GridView 附加了这个模型子类。当我从我的子类中删除行时,GridView 会更新,但是当我在模型中插入行时,GridView 不会
我有一个从 QAbstractListModel 派生的自定义模型,它暴露给 QML。我需要支持添加新项目和删除现有项目的操作。虽然插入操作没有任何问题,但删除操作会导致应用程序在调用 endRemo
在已经实例化的 QAbstractListModel 子类中,如何在每列中添加包含数据的行,并让关联的 QListView 显示新行? 似乎唯一的方法是在我的模型中重新实现 insertRow 和 s
我试图了解人们如何选择使用 QAbstractListModel 还是 QObject 和 QQmlListProperty。 鉴于 QQmlListProperty 处理必须使用 QAbstract
我正在尝试创建一个 QAbstractListView 以与 QComboBox 一起使用,该 QComboBox 维护其包含的项目的排序列表。我在下面提供了一些示例代码来说明我的问题。当我更新列表中
我正在尝试实现 QAbstractListModel 类以显示几个类似的小部件。以下代码显示了我的问题: import sys from PyQt4 import QtCore from PyQt4
我的问题是,如何将自定义对象指定为从 QAbstractListModel 派生的模型中的角色所以当在 ListView 中可视化它时我可以访问它的成员变量。这里有一个例子是一些简单的代码示例: 这是
我正在尝试按照本教程 Models and Views: AbstractItemModel Example 子类化 QAbstractListModel 来查看 qml 中的 C++ 模型列表 这是
大家好 我已经扩展了我自己的 QAbstractListModel 来改变 QCombobox 的背景颜色。如图所示,我有两个问题。1)如第一张图片快照所示,所选项目没有出现背景颜色。2) 选择项目时
我已经在 QML 中使用 TableViewColumn 实现了 TableView,其中的一些角色如下: TableView { TableViewColumn { role
我有课MyListModel ,它继承自使用 QListView 或自定义子类显示的 QAbstractListModel。我希望列表中的每个项目都是可编辑的,并且用户能够拖放以重新排列项目的顺序(我
我在 C++ 中有一个分层(嵌套)QAbstractListModel,即 Outer 模型的项目是 Inner 模型的实例, Inner 类的项是一些 QObject 派生的 Data 实例。 Ou
我是 Qt 新手,所以请耐心等待。 我已经成功地从 StringList 和对象的 QList 填充 ListView* 我现在正在努力解决的是使用 C++ 中定义的派生 QAbstractListM
我通过继承自 QAbstractListModel 创建了一个 ListView 模型。我实现了 data(const QModelIndex &, int ) 来提供列表项背景颜色(在 Qt::Ba
我正在尝试创建一个基于异步数据库 API 的列表模型。这是我希望如何使用它的 qml 示例: ListView { id: view; anchors.fill: parent;
我正在关注 this PySide tutorial尽可能接近使用 PyQt5。当我运行我的代码时,出现此错误:ReferenceError: pythonListModel is not defin
我是一名优秀的程序员,十分优秀!