什么是Qt的代理QItemDelegate_Spin Box Delegate Example例子分析

什么是Qt MVC代理

什么是Qt的代理QItemDelegate_Spin Box Delegate Example例子分析_第1张图片      

 图1   显示的是我们看到表格正常显示的样子。

  什么是Qt的代理QItemDelegate_Spin Box Delegate Example例子分析_第2张图片

图2  当在单元个上双击,显示的是在此单元格上设置的代理。

这里代理是一个Spinbox,这个Spinbox会读取当前单元格的内容,覆盖在当前单元格之上,

并且提供编辑功能,当用户编辑完成之后,比如,修改了Spinbox的数字后,点击此单元格意外的地方,

代理消失,把代理修改的参数设置到当前的单元格上,重新显示图1一个正常的表格。


可以简单的理解,代理其实就是提供一个编辑功能的面板,把QtMVC的部件与编辑面板合二为一。


在这里主要借助Qt提供的Spin Box Delegate Example例子来简单理解一下。

什么是Qt的代理QItemDelegate_Spin Box Delegate Example例子分析_第3张图片

这个例子中自定义代理SpinBoxDelegate继承QItemDelegate,

至少要实现上图中的四个虚函数。


QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;

这个函数重载自虚基类,这个函数返回一个用来编辑index指定的item的widget,parent widget和option参数用来控制这个editor widget编辑面板如何的显示。

也就是说这个editor widget需要设置parent 为参数传递过来的parent,这样调用者才能把这个编辑器放到它的内部。

在这个函数中初始化你想要的编辑器。

void setEditorData(QWidget *editor, const QModelIndex &index) const;

什么是Qt的代理QItemDelegate_Spin Box Delegate Example例子分析_第4张图片

这个函数也是重载了基类的虚函数。

函数的功能是,将当前modeindex中的数据取出来,放到编辑器editor中,

默认的是把数据放到modeindex的 index.model()->data(index,Qt::EditRole)中

3

void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
什么是Qt的代理QItemDelegate_Spin Box Delegate Example例子分析_第5张图片

这个函数同样重载自虚基类。

这个函数的功能是,将editor中的内容提取出来,设置到当前选中的单元格中。

默认的是把数据放到modeindex的 index.model()->data(index, Qt::EditRole)中

4

void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;

根据option来更新编辑器的几何属性。


这里是简单的讲解Spin Box Delegate Example例子,

具体内容需要查看例子源码。






你可能感兴趣的:(Qt)