QTableView添加代理 QComboBox &QSPinBox

/**********************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");
    }
}


 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值