解析:
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));
}