Qt模型视图框架:QAbstractListModel、QAbstractTableModel

QAbstractListModel

QAbstractListModel 为列表模型提供了标准接口,列表模型将其数据表示为简单的非分层项目序列。

由于该模型提供了比 QAbstractItemModel 更特例化的接口,因此不适合与树视图一起使用。如果想为此目的提供模型,则需要将 QAbstractItemModel 子类化。如果需要使用多个列表模型来管理数据,那么将 QAbstractTableModel 子类化更合适。

子类化

1、在继承 QAbstractListModel 时,必须提供 rowCount() 和 data() 函数的实现。表现良好的模型还提供了 headerData() 实现。

2、如果模型在 QML 中使用并且需要使用自定义角色,则必须覆盖 roleNames() 函数。

3、对于可编辑列表模型,还必须提供 setData() 的实现,并实现 flags() 函数,以便它返回一个包含 Qt::ItemIsEditable 的值。

4、QAbstractListModel 提供了 columnCount() 的默认实现,它通知视图此模型中只有一列项目。

5、为可调整大小的类似列表的数据结构提供接口的模型可以提供 insertRows() 和 removeRows() 的实现。在实现这些功能时,重要的是调用适当的功能,以便所有连接的视图都知道任何更改:        

  • insertRows():必须在将新行插入数据结构之前调用 beginInsertRows(),并且在之后必须立即调用 endInsertRows()
  • removeRows():必须在从数据结构中删除行之前调用 beginRemoveRows() ,之后必须立即调用 endRemoveRows()。

QAbstractTableModel

QAbstractTableModel 为将其数据表示为项目的二维数组的模型提供了标准接口。

由于该模型提供了比 QAbstractItemModel 更特例化的接口,因此它不适合与树视图一起使用。

rowCount() 和 columnCount() 函数返回表的维度。 要检索与模型中的项目相对应的模型索引,请使用 index() 并仅提供行号和列号。

子类化

1、在继承 QAbstractTableModel 时,必须实现 rowCount()、columnCount() 、 data()。index() 和 parent() 函数的默认实现由 QAbstractTableModel 提供。表现良好的模型也将实现 headerData()。

2、可编辑模型需要实现 setData(),并实现 flags() 以返回包含 Qt::ItemIsEditable 的值。

3、为可调整大小的数据结构提供接口的模型可以提供 insertRows()、removeRows()、insertColumns() 和 removeColumns() 的实现。在实现这些功能时,重要的是调用适当的功能,以便所有连接的视图都知道任何更改:

  • insertRows():必须在将新行插入数据结构之前调用 beginInsertRows(),并且在之后必须立即调用 endInsertRows()。
  • insertColumns():必须在将新列插入数据结构之前调用 beginInsertColumns(),并且在之后必须立即调用 endInsertColumns()。
  • removeRows():必须在从数据结构中删除行之前调用 beginRemoveRows() ,之后必须立即调用 endRemoveRows() 。
  • removeColumns():必须在从数据结构中删除列之前调用 beginRemoveColumns(),之后必须立即调用 endRemoveColumns()。
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值