您的位置:首页 > 编程语言 > Qt开发

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

2016-01-21 11:20 597 查看
什么是Qt MVC代理



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



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

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

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

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

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

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



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

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

1

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




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

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

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

2

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




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

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

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

3

void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;




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

这个函数的功能是,将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例子,

具体内容需要查看例子源码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: