QtCreator委托类 QItemDelegate,自定义委托类
2015-08-29 10:59
441 查看
1 基本概念
QAbstractItemDelegate:所有委托类的基类,使用paint()和sizeHint()来使它们可以渲染自身的内容2 自定义委托
2.1 向项目中添加新的C++类,类名SpinBoxDelegate,基类QItemDelegate,类型信息继承自QObject向自定义的委托类中添加管理编辑器部件的函数
//创建编辑器
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) 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;
2.1.1 添加函数的实现//创建编辑器,当视图需要一个编辑器时,它通知委托来为被修改的项目提供一个编辑器部件
QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */,
const QModelIndex &/* index */) const
{
QSpinBox *editor = new QSpinBox(parent);
editor->setMinimum(0);
editor->setMaximum(100);
return editor;
}
//为编辑器设置数据
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();//确保获得的是QSpinBox中最近更新的数值,标准的QItemDelegate会在完成编辑后发射closeEdit信号
int value = spinBox->value();
model->setData(index,value,Qt::EditRole);
}
//更新编辑器的几何布局
void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
editor->setGeometry(option.rect);
}2.2 使用自定义的委托2.2.1 界面实现文件中添加头文件
#include "spinboxdelegate.h"2.2.2在界面文件的cpp中构造函数里面添加如下代码:
//设置自定义的委托
SpinBoxDelegate* delegate = new SpinBoxDelegate(this);
tableView->setItemDelegate(delegate);
转载自:http://m.blog.csdn.net/blog/psujtfc/37958567
相关文章推荐
- Qt 简介
- Qt学习之路【2】:调用父类构造函数
- 学习Qt5(1)
- qt中QString转char *
- QT的信号与槽机制介绍
- qt qml opengl QPainter画笔实例
- linux下配置opencv和qt
- Qt aero peek
- Inside Qt Series (十三):Qt/e体系结构概述
- 移植qt-4.8.5至 mini2440建立交叉编译及qt运行环境
- Qt编程中QDiaog的ESC建
- Qt入门学习——常用部件介绍
- QT和MFC
- qml构建一个渐变色的窗口
- QT 创建子窗体
- Qt4中的模态与非模态对话框用法总结
- qt unicode编码到16进制符号字符串
- QT QListWidget去掉滚动条
- QT中tr函数的使用
- Qt 解码unicode 16进制符号字符串