Qt文档阅读笔记-QStyledItemDelegate::paint介绍及简单使用
生活随笔
收集整理的這篇文章主要介紹了
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<MyPic>()){//qDebug()<<"can be convert!";MyPic mypic=qvariant_cast<MyPic>(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;i<m_num;i++){painter->drawImage(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<MyPic>()){//qDebug()<<"can be convert!";MyPic mypic=qvariant_cast<MyPic>(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;i<m_num;i++){painter->drawImage(rect.x()+i*m_singlePicWidth,rect.y(),QImage(":/img/pig.png").scaled(m_singlePicWidth,m_singlePicWidth));}painter->restore(); }運行截圖如下:
總結
以上是生活随笔為你收集整理的Qt文档阅读笔记-QStyledItemDelegate::paint介绍及简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java工作笔记-使用Hibernate
- 下一篇: Qt|OpenGL-天空盒子的创建