Qt工作笔记-QTableWidget设置委托(使用QStyledItemDelegate画3只小猪)
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-QTableWidget设置委托(使用QStyledItemDelegate画3只小猪)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解析:
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_Hmypic.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_Hmain.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 headerfor(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)); }?
總結
以上是生活随笔為你收集整理的Qt工作笔记-QTableWidget设置委托(使用QStyledItemDelegate画3只小猪)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt工作笔记-ListWidget拖动(
- 下一篇: Qt工作笔记-以配置文件的方式动态获取M