我正在尝试遵循教程 here使用 QtQuick2 在 TableView 中显示 SQLITE 表。在该教程中,generateRoleNames() 方法最后调用 setRoleNames()。但是,该方法已被弃用。
有一个方法 doSetRoleNames(),但它是私有(private)的,派生的 QLSqlTableModel 类不可用。源代码是 here .
编辑:我的 roleNames() 实现的主体:
QHash<int, QByteArray> QLSqlTableModel::roleNames() {
return roles;
}
最佳答案
方法QAbstractItemModel::roleNames() 是虚拟的,因此要定义您自己的角色名称,在子类中重新实现它并返回所需的哈希值。这意味着您必须继承 QSqlTableModel。
(角色名称的主要目的是从 QtQuick 中的模型接收角色。)
角色不是“列的名称标识符”,角色和列是正交的:
对于每个索引,可以检索文本、图标、颜色等,或自定义用户定义的数据。 一个人可以有例如具有单列模型的任意数量的自定义角色。 然而,SQL 表模型是角色通常与列匹配的特定情况:由于 QtQuick View 通常显示单个列但可以轻松处理许多角色,因此定义与表列中的数据对应的角色,以便轻松访问所有相关的通过角色的数据。
关于c++ - 由于不推荐使用 setRolesNames() 方法,因此将角色名称分配给 QAbstractItemModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19734600/