QItemDelegate表格添加控件简单解析

目录

一、前言

二、效果展示

三、源码解析

四、Demo


一、前言

本例介绍在表格内添加控件的方法,建议结合我上一篇博客《QAbstractTableModel表格制作简单解析》一起看。

二、效果展示

三、源码解析

CButtonDelegate.h

#ifndef CBUTTONDELEGATE_H
#define CBUTTONDELEGATE_H

#include <QItemDelegate>
#include <QStringList>


/*管理table里的自定义控件*/
class CButtonDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    CButtonDelegate(QObject * parent=0);
    ~CButtonDelegate();

    //返回一个编辑控件, 用来编辑指定项的数据
    QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    //界面选中, 将Model中数据赋值到控件上
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    //设置model的值
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;

private:
    //虚拟值
    QStringList m_list;
};

#endif // CBUTTONDELEGATE_H

CButtonDelegate.cpp

#include "CButtonDelegate.h"
#include <QComboBox>
#include <QDebug>
#include <QTextCodec>



CButtonDelegate::CButtonDelegate(QObject * parent):QItemDelegate(parent)
{
    m_list << ("Martin")
           << ("Thomas")
           << ("Joy");
}

CButtonDelegate::~CButtonDelegate()
{
}


QWidget * CButtonDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index)const
{
    QComboBox* combox = new QComboBox(parent);
    combox->addItems(m_list);
    return combox;
}

void CButtonDelegate::setEditorData(QWidget *editor, const QModelIndex &index)const
{
    QString sValue = index.model()->data(index, Qt::EditRole).toString();

    int i = 0;
    for(; i < m_list.count(); i++)
    {
        if(sValue.compare(m_list.at(i)) == 0)
        {
            break;
        }
    }

    QComboBox *combox = static_cast<QComboBox*>(editor);
    combox->setCurrentIndex(i);
}

void CButtonDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index)const
{
    QComboBox *combox = static_cast<QComboBox*>(editor);
    QString sValue = combox->currentText();
    model->setData(index, sValue, Qt::EditRole);
}

void CButtonDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index)const
{
    editor->setGeometry(option.rect);
}



四、Demo

另附Demo供大家参考(百度云盘):

链接: https://pan.baidu.com/s/1ymFpHvrO3U4UgtO4SWYHAA 提取码: mh7b

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值