日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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介绍及简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。