createEditor函數
setEditorDatathis
setModelDataspa
這三個函數是要用到的函數。然而按F1竟然不能跳轉到幫助文檔,這算不算bug。code
下面這段代碼是要實如今一個表格中添加spin控件
文檔
spinDelegate頭文件:get
#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文件it
#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屬性中保存了條目的位置,這裏將控件設置在恰好佔住條目的位置 }
固然,別忘記了在窗口作一些設置io
#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); }