继承QStyleItemDelegate类或者QItemDelegate类,基类都是QAbstractItemDelegate。
-------------------------本文用QStyleItemDelegate类---------------------
继承QStyleItemDelegate类并重写4个函数:(重写描述的是父子类关系,重载描述的一个类的不同函数)
1. createEditor (QWidget *parent, QStyleOptionViewItem *option , QModeIndex *index) const; 函数创建需要用到的委托控件类型并返回这个对象,比如下拉框.
三个参数 1). QWidget *parent : 作为新创建的控件的父类
2). 3)参数此函数不涉及。
2. setEditData ( QWidget *editor, QModeIndex *index) const ;
1)根据index获取model进而获取此index下的数据; index.model()->data(index, Qt::EditRole);
2)将QWidget *editor 强制转化成creatEditor()函数创建的控件类型并为该控件赋值。
3. setModeData( QWidget *editor ,QAbstractItemModel *model, QModelIndex * index) const;
1)与setEditData 相反,将editor强制转化成creatEditor()中的控件类型。
2)model.setData(index, “数据赋值”,Qt::WditRole).
4. updateEditorGeometry(QWidget *editor, QStyleOptionViewItem *option,QModeIndex & index ) const ;
updateEditorGeometry就是将editor设置到一定位置,并且有一定大小,使这个editor看起来像是正好嵌入到格子里面一样。用的是option.rect。
editor->setGometry ( option . rect );