Qt工作笔记-QTableWidget设置委托(使用QStyledItemDelegate画3只小猪)

583 篇文章 127 订阅
388 篇文章 20 订阅

解析:
1.MyDelegate类为代理,给TableWidget的。
2.MyPic类用于画图

运行截图如下:

源码如下:

mydelegate.h

#ifndef MYDELEGATE_H
#define MYDELEGATE_H

#include <QStyledItemDelegate>

class MyDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    explicit MyDelegate(QWidget *parent = 0);

    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
    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;

signals:

public slots:
};

#endif // MYDELEGATE_H

mypic.h

#ifndef MYPIC_H
#define MYPIC_H

#include <QMetaType>
#include <QRect>

class QPainter;

class MyPic
{
public:
    MyPic();
    void paint(QPainter *painter,const QRect &rect) const;
};

Q_DECLARE_METATYPE(MyPic)

#endif // MYPIC_H

main.cpp

#include <QTableWidget>
#include <QTableWidgetItem>
#include <QApplication>
#include <QHeaderView>
#include "mydelegate.h"
#include "mypic.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTableWidget tableWidget(4,5);
    QStringList headerList;
    headerList<<"header1"<<"header2"<<"header3"<<"header4"<<"header5";
    tableWidget.setHorizontalHeaderLabels(headerList);

    //it make beautiful header
    for(int i=0;i<headerList.size();i++)
        tableWidget.horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);


    for(int i=0;i<tableWidget.rowCount();i++){
        for(int j=0;j<tableWidget.columnCount();j++){
            QTableWidgetItem *item=new QTableWidgetItem;
            item->setData(0,QVariant::fromValue(MyPic()));
            tableWidget.setItem(i,j,item);
        }
    }

    tableWidget.setItemDelegate(new MyDelegate);


    tableWidget.resize(600,150);
    tableWidget.show();


    return a.exec();
}

mydelegate.cpp

#include "mydelegate.h"
#include "mypic.h"
#include <QPainter>
#include <QDebug>

MyDelegate::MyDelegate(QWidget *parent) : QStyledItemDelegate(parent)
{

}

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(index.data().canConvert<MyPic>()){
        //qDebug()<<"can be convert!";
        MyPic mypic=qvariant_cast<MyPic>(index.data());
        mypic.paint(painter,option.rect);
    }
    else{
        qDebug()<<"can't be convert!";
    }
    QStyledItemDelegate::paint(painter, option, index);
}

QSize MyDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    return QStyledItemDelegate::sizeHint(option,index);
}

QWidget *MyDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    return NULL;
}

void MyDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{

}

void MyDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    QStyledItemDelegate::setModelData(editor,model,index);
}

mypic.cpp

#include "mypic.h"
#include <QPainter>
#include <QImage>

MyPic::MyPic()
{

}

void MyPic::paint(QPainter *painter,const QRect &rect) const
{
    painter->drawImage(rect.x(),rect.y(),QImage(":/img/pig.png").scaled(30,30));
    painter->drawImage(rect.x()+30,rect.y(),QImage(":/img/pig.png").scaled(30,30));
    painter->drawImage(rect.x()+30+30,rect.y(),QImage(":/img/pig.png").scaled(30,30));
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值