首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

基于QItemDelegate的例证1 SpinBoxDelegate

2012-09-14 
基于QItemDelegate的例子1 SpinBoxDelegate? ? ? ? SpinBoxDelegate例子是Qt Assistant中提供的一个非常优

基于QItemDelegate的例子1 SpinBoxDelegate

? ? ? ? SpinBoxDelegate例子是Qt Assistant中提供的一个非常优秀的例子,虽然讲的是继承于QItemDelegate的例子。但对于我们理解Delegate-委托这个概念,非常有帮助。

它重载了必须的几个函数:

? ? ? ??(1) ?QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,const QModelIndex &index) const;
? ? ? ?(2) ?void setEditorData(QWidget *editor, const QModelIndex &index) const;
? ? ? ?(3) ?void setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index) const;
? ? ? ?(4) ?void updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option, const QModelIndex &index) const;

下面把源码附上,并加上部分注释。附件有源码可以下载。

?

Main.cpp

?

#include <QtGui>#include "delegate.h"SpinBoxDelegate::SpinBoxDelegate(QObject *parent)    : QItemDelegate(parent){}//返回一个编辑控件,用来编辑指定项的数据QWidget *SpinBoxDelegate::createEditor(QWidget *parent,    const QStyleOptionViewItem &/* option */,    const QModelIndex &/* index */) const{    //返回该QSpinBox控件    QSpinBox *editor = new QSpinBox(parent);    editor->setMinimum(0);    editor->setMaximum(100);    return editor;}//将Model中数据赋值到控件上void SpinBoxDelegate::setEditorData(QWidget *editor,                                    const QModelIndex &index) const{    //返回该索引的模型,继而返回该模型中此索引的编辑角色数据    int value = index.model()->data(index, Qt::EditRole).toInt();    //给控件赋值    QSpinBox *spinBox = static_cast<QSpinBox*>(editor);    spinBox->setValue(value);}//设定模型数据,根据指定项中对应编辑控件的数据void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,                                   const QModelIndex &index) const{    QSpinBox *spinBox = static_cast<QSpinBox*>(editor);    spinBox->interpretText();    int value = spinBox->value();    //设置模型的数据    model->setData(index, value, Qt::EditRole);}//更新编辑框几何形状void SpinBoxDelegate::updateEditorGeometry(QWidget *editor,    const QStyleOptionViewItem &option, const QModelIndex &/* index */) const{    //根据option,设置编辑框位置    editor->setGeometry(option.rect);}

热点排行