Qt文档阅读笔记-QStyledItemDelegate::paint介绍及简单使用

官方解析

重写于QAbstractItemDelegate::paint()。

通过使用option与painter对指定的index位置的委托进行渲染。

当描述各种item的时候使用view的QStyle。

当从子类重新实现paint这个函数时候,要用initStyleOption()这个函数去重新设置option这个参数。

在画图中要尽可能的使用option参数,特别是这个参数里的rect变量。并且option里面的state这个变量也非常好用,他能判断这个item是否enabled或selected。

当画玩后,painter要会到调用他之前的状态。举个栗子,在调用前使用QPainter::save()在调用后使用QPainter::restore()。


博主小栗子

同样还是使用了三只小猪的例子(源码链接如下,在此只给出伪代码)

原始伪代码(很辣鸡的代码,根本就是乱搞):

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyledItemDelegate::paint(painter, option, index);


    if(index.data().canConvert()){
        //qDebug()<<"can be convert!";
        MyPic mypic=qvariant_cast(index.data());
        mypic.paint(painter,option.rect);
    }
    else{
        qDebug()<<"can't be convert!";
    }
}
void MyPic::paint(QPainter *painter,const QRect &rect) const
{
    painter->setRenderHint(QPainter::Antialiasing, true);
    for(int i=0;idrawImage(rect.x()+i*m_singlePicWidth,rect.y(),QImage(":/img/pig.png").scaled(m_singlePicWidth,m_singlePicWidth));
    }
}

运行截图如下:

修改后的伪代码:

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyledItemDelegate::paint(painter, option, index);


    if(index.data().canConvert()){
        //qDebug()<<"can be convert!";
        MyPic mypic=qvariant_cast(index.data());

        if(option.state&QStyle::State_Selected){

            painter->save();
            painter->fillRect(option.rect,Qt::DiagCrossPattern);
            painter->restore();
        }

        mypic.paint(painter,option.rect);
    }
    else{
        qDebug()<<"can't be convert!";
    }
}
void MyPic::paint(QPainter *painter,const QRect &rect) const
{
    painter->save();

    painter->setRenderHint(QPainter::Antialiasing, true);
    for(int i=0;idrawImage(rect.x()+i*m_singlePicWidth,rect.y(),QImage(":/img/pig.png").scaled(m_singlePicWidth,m_singlePicWidth));
    }

    painter->restore();
}

运行截图如下:

你可能感兴趣的:(C/C++,Qt,文档阅读笔记)