/**********************MyTableDelegate.h********/
#include <QObject>
#include <QPushButton>
#include <QComBox>
#include <QSpinBox>
class MyTableDelegate:public QStyleItemDelegate
{
Q_OBJECT
public:
explicit MyTableDelegate(QObject *parent = nullptr);
~MyTableDelegate();
//当需要创建自定义交互编辑器时,需要实现下面几个函数
QWidget *creatEditor(QWidget *parent,const QStyleOptionViewItem &option,
const QModelIndex &index)const override;
void setEditorData(Qwidget *parent,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;
}
/*******************MyTableDelegate.cpp**********************/
#include <QApplication>
#include <QMouseEvent>
#include <QDebug>
#include <QComboBox>
MyTableDelegate::MyTableDelegate(QObject *parent)
:QStyledItemDelegate(parent)
{
}
MyTableDelegate::~MyTableDelegate()
{
}
QWidget *MyTableDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &option,
const QModelIndex &index)const
{
if(index.column() == 2)
{
QComboBox *tableComBox = new QComboBox(parent);
tableComBox->addItem("boy");
tableComBox->addItem("girl");
}
else if(index.column() == 4)
{
QSpinBox *tableSpinBox = new QSpinBox(parent);
tableSpinBox->setFrame(false);
tableSpinBox->setMinimun(0);
tableSpinBox->setMaxmum(100);
return tableSpinBox;
}
return QStyledItemDelegate::createEditor(parent,option index);
}
void MyTableDelegate::setEditorData(QWidgt *editor,const QModelIndex &index)const
{
if(index.column()==2)
{
QString value = index.model()->data(index,Qt::EditRole).toString();
QComboBox* comboBox = static_casr<QComboBox*>(editor);
int tindex =comboBox->findText(value);
comboBox->setCurrentIndex(index);
}
else if(index.column() == 4)
{
int value = index.model()->data(index,Qt::EditRole).toInt();
QSpinBox* spinBox = static_cast<QSpinBox*>(editor);
spinBox->SetValue(value);
}
else{
QStyledItemDelegate::setEditorData(editor,index);
}
}
void MyTableDelegate::seModelData(QWidget *editor,QAbstractItem *model,const QModelIndex &index)const
{
if(index.column() ==2)
{
QComboBox* comboBox = ststic_cast<QComboBox*>(editor);
QString text = comBox->currentText();
model->setData(index,text,Qt::EditRole);
}
else if(index.column()==4)
{
QSpinBox* spinBox = static_cast<QSpinBox*>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index,value,Qt::EditRole);
}
else
{
QStyledItemDelegate::setModelData(editor,model,index);
}
}
/***************************QTableView代理的使用****************/
//新建tableModel
QStandardItemModel *m_pStandTableModel = new QStandItemModel();
//设置表格内容函数
setTableView();
MyTableDelegate *tableDelegate = new MyTableDelegate(this);
ui->tableView->setItemDelegate(tableDelegate);
/********************设置表格内容函数 setTableView()*************************/
void Widget::setTableView()
{
*m_pStandTableModel ->setHorizontalHeaderLabels({tr("标题"),tr("产品编号"),
tr("产品名称"),tr("结束时间"),tr("结束")});
ui->tableView->setModel(*m_pStandTableModel );
ui->tableView->setShowGrid(true);
for(int r = 0;r<row;r++)
for(int c = 0;c<column;c++)
{
QModelIndex index = *m_pStandTableModel ->index(r,c);
m_pStandTableModel->setData(index0,"TR-Maintain");
}
}