创建一个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 或者视图单机事件来达到单机触发的效果