1

我正在尝试按照此处的教程使用 QtQuick2 在 TableView 中显示 SQLITE 表。在该教程中,generateRoleNames() 方法在最后调用 setRoleNames()。但是,该方法已被弃用。

有一个方法 doSetRoleNames(),但它是私有的,不能用于派生的 QLSqlTableModel 类。源代码在这里

编辑:我的 roleNames() 实现的主体:

QHash<int, QByteArray> QLSqlTableModel::roleNames() {
  return roles;
}
4

1 回答 1

2

方法QAbstractItemModel::roleNames()是虚拟的,因此要定义自己的角色名称,在子类中重新实现它并返回所需的哈希值。这意味着你必须继承 QSqlTableModel。

(角色名称的主要目的是从 QtQuick 中的模型接收角色。)

角色不是“列的名称标识符”,角色和列是正交的:

对于每个索引,可以检索文本、图标、颜色等,或自定义用户定义的数据。例如,可以使用单列模型拥有任意数量的自定义角色。但是,SQL 表模型是角色通常与列匹配的特定情况:由于 QtQuick 视图通常显示单个列但可以轻松处理多个角色,因此定义了与表列中的数据相对应的角色,以便轻松访问所有相关通过角色获取数据。

于 2013-11-01T21:21:36.483 回答