创建自定义类Delegate
新Delegate的.h文件
#ifndef SPINBOXDELEGATE_H
#define SPINBOXDELEGATE_H
#include<QItemDelegate>
#include<QDebug>
class Delegate : public QItemDelegate
{
Q_OBJECT
public:
Delegate(QObject * parent=0);
QWidget *createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
};
#endif
Delegate的.cpp文件
#include "delegate.h"
#include<QSpinBox>
#include<QLineEdit>
Delegate::Delegate(QObject * parent):QItemDelegate(parent)
{
}
QWidget *Delegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QLineEdit *spinBox=new QLineEdit(parent);
spinBox->resize(50,30);
return spinBox;
}
void Delegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
QString value = index.model()->data(index,Qt::EditRole).toString();
auto qLineEdit =static_cast<QLineEdit *>(editor);
qLineEdit->setText(value);
}
void Delegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
auto qLineEdit =static_cast<QLineEdit *>(editor);
QString value= qLineEdit->text();
qDebug()<<"新设置的值:"<<value;
qDebug()<<"index:"<<index;
qDebug()<<"第一行:"<<index.siblingAtColumn(0).data().toString();
model->setData(index,value,Qt::EditRole);
}
void Delegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
editor->setGeometry(option.rect);
}
在MainWindow文件引用自定义的
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
#include <QTableView>
#include "delegate.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
this->setWindowTitle("标题");
ui->setupUi(this);
auto *model2=new QStandardItemModel(7,4,this);
QStringList header;
header<<"a"<<"b"<<"c"<<"d";
model2->setHorizontalHeaderLabels(header);
for (int row=0;row<7;row++) {
for (int coumn=0;coumn<4;coumn++) {
QStandardItem * item=new QStandardItem(QString("%1").arg(row*4+coumn));
model2->setItem(row,coumn,item);
}
}
auto * delegate=new Delegate();
ui->tableView->setModel(model2);
ui->tableView->setItemDelegate(delegate);
ui->tableView->resize(800,800);
}
MainWindow::~MainWindow()
{
delete ui;
}