Qt model/View 学习笔记

本文是关于Qt Model/View的学习笔记,主要介绍了如何创建继承自QAbstractListModel的只读模型,包括重写data和headerData函数以实现数据和表头的显示。为了实现可编辑模型,还需要实现flags、setData、insertRows和removeRows等方法。同时,讲解了自定义QItemDelegate代理,强调了createEditor、updateEditorGeometry、setEditorData和setModelData的重要性,以及如何通过paint函数定制单元格样式,并利用editorEvent或视图单击事件响应交互操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建一个model类,继承于QAbstractListModel。

如果创建的只读模型,只需要重写

 int rowCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant data(const QModelIndex &index, int role) const;
    QVariant headerData(int section, Qt::Orientation orientation,int role = Qt::DisplayRole) const;
注:如果是list的数据,则不需要columncount();

其中data用于数据的显示,headerData用于表头的显示。

 

如果还需要对model进行编辑,则还需要

flags(),setData(),insertRows,removeRows()等函数。

对于继承于QItemDelegate 的代理,必须重载

 QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,const QModelIndex &index)const;

其中createEditor创建代理的模型,updateEditorGeometry用于管理代理的位置,setEditorData在双击进入编辑和结束编辑时调用,setModelData最终将数据同步到model中。

代理只能是在双击之后才会显示,如果想要视图中直接出现按钮或者自定义图片的效果,则可以重载paint函数对单元格样式进行绘制,然后使用editorEvent 或者视图单机事件来达到单机触发的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值