c++ - 由于不推荐使用 setRolesNames() 方法,因此将角色名称分配给 QAbstractItemModel

标签 c++ qt qml qt5

我正在尝试遵循教程 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/

相关文章:

c++ - C/C++ 标签 (goto) 的数量如何影响性能?

c# - 在C++中实现锁

python - 如何更改 QTextOption.ShowTabsAndSpaces 使用的字符?

qt - 将项目添加到自定义组件的布局

c++ - 使用 pselect 进行同步等待

c++ - 如何更改 QComboBox 项目的高度大小?

c++ - 删除继承自QWidget的对象,WA_DeleteOnClose段错误

qt - 无法访问驻留在同一目录中的 QML 单例

python - 将 QML 信号连接到 PySide2 插槽

c++ - 具有显式调整大小的 vector