我自己写的委托继承自 QStyledItemDelegate,需要自己实现的函数有如下几个:
//basic function for a read-only delegate, you can draw anything with the painter
void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const;
QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const;
//for a editable delegate
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 ;
这几天,编程思考了一番, 不明白为什么不在创建的时候就给Editor赋值呢?后来我专门试了一下,我把setEditorData函数体的赋值内容移到了createEditor中,运行结果:能显示出赋的值。所以我就很奇怪,为什么setEditorData会出现在这儿呢,Qt设计这个函数是出于什么目的?请大家讨论
另外,还有一个问题:用委托写的控件,怎么检测输入数据的合法性之后再提交,我在委托的控件中设置了 validator,如果输入非法数据,每次我按回车之后,会弹出提示 数据非法,但是委托控件还是消失了,这个时候应该能够返回继续编辑的,大侠们有何感想?