自学QT之代理Delegate
2015-12-20 00:00
405 查看
摘要: 自学QT之代理Delegate
createEditor
setEditorData
setModelData
这三个函数是要用到的函数。然而按F1居然不能跳转到帮助文档,这算不算bug。
下面这段代码是要实现在一个表格中添加spin控件
spinDelegate头文件:
cpp文件
当然,别忘记了在窗口做一些设置
createEditor
setEditorData
setModelData
这三个函数是要用到的函数。然而按F1居然不能跳转到帮助文档,这算不算bug。
下面这段代码是要实现在一个表格中添加spin控件
spinDelegate头文件:
#ifndef SPINBOXDELEGATE_H#define SPINBOXDELEGATE_H #include <QItemDelegate> #include <QObject> #include <QSpinBox> class SpinBoxDelegate : public QItemDelegate { Q_OBJECT public: SpinBoxDelegate(QObject *parent = 0); 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; }; #endif // SPINBOXDELEGATE_H
cpp文件
#include "spinboxdelegate.h"#include <QSpinBox> #include <QItemDelegate> SpinBoxDelegate::SpinBoxDelegate(QObject *parent) : QItemDelegate(parent) { } QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const { QSpinBox *editor = new QSpinBox(parent); editor->setRange(0,10000); editor->installEventFilter(const_cast<SpinBoxDelegate*>(this)); 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 *box = static_cast<QSpinBox*>(editor); int value = box->value(); model->setData(index,value); } void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { editor->setGeometry(option.rect); // option.rect属性中保存了条目的位置,这里将控件设置在刚好占住条目的位置 }
当然,别忘记了在窗口做一些设置
#include "widget.h"#include <QItemDelegate> #include <QDir> #include <QFileInfo> #include <QFile> #include <QFileDialog> #include "spinboxdelegate.h" Widget::Widget(QWidget *parent) : QWidget(parent) { QStandardItemModel *tableModel=new QStandardItemModel(4,4,this); SpinBoxDelegate *spinDelegate=new SpinBoxDelegate; tableModel->setHeaderData(0,Qt::Horizontal,tr("部门")); tableModel->setHeaderData(1,Qt::Horizontal,"姓名"); tableModel->setHeaderData(2,Qt::Horizontal,"女"); tableModel->setHeaderData(4,Qt::Horizontal,"退休"); QTableView *tabletView=new QTableView; tabletView->setModel(tableModel); tabletView->setItemDelegateForColumn(3,spinDelegate); QHBoxLayout *mainLayout=new QHBoxLayout(this); mainLayout->addWidget(tabletView); }
相关文章推荐
- Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
- PyQt4学习笔记8之绘图
- 18、osg3.2.1+qt5.5+vs2010例子,也是osg中的例子
- Qt之Q_PROPERTY宏定义二
- Qt之Q_PROPERTY宏定义
- 制作QT镜像文件
- <基于Qt与POSIX线程>多线程下载器的简易搭建
- Qt遇到奇怪的问题--FTH
- QT 5.5.1 zynq 7000 的交叉编译
- Qt stylesheet 详解
- Qt之设置QWidget背景色
- Qt之设置QWidget背景色
- Qt学习——qt软件启动界面
- Qt 使用sqlserver
- Qt之自定义搜索框
- Qt之自定义搜索框
- qt中的lineEdit文本输入框的输入类型限制(三种验证类)
- Qt Creator同时运行多个项目,main函数报错
- QDialog之屏蔽Esc键
- VS 2013+Qt 5.4.1