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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

自定义QGraphicsItem

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义QGraphicsItem 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

QGraphicsItem 是場景中 item 的基類。圖形視圖提供了一些典型形狀的標準 item,例如:矩形 ( QGraphicsRectItem )、橢圓 ( QGraphicsEllipseItem ) 、文本項 ( QGraphicsTextItem )。當這些不滿足需求時(例如:需要一些特定形狀時),往往需要自定義,通常的做法就是繼承 QGraphicsItem(QGraphicsObject)。

自定義Item

必須要實現兩個虛函數,否則會報allocating an object of abstract class type “xxxx”。
void paint() : 以本地坐標繪制 item 的內容
QRectF boundingRect() : 將 item 的外邊界作為矩形返回由 QGraphicsView 調用以確定什么區域需要重繪

除此之外,可能還需要附加其他需求,
例如:QPainterPath shape() - item 的形狀 由contains() 和 collidesWithPath() 用于碰撞檢測。如果未實現,則默認為 boundingRect()。
使用信號/槽、屬性機制:繼承 QObject 和 QGraphicsItem(或直接繼承 QGraphicsObject)
處理鼠標事件:重新實現 mouse***Event()
處理鍵盤事件:重新實現 key***Event()
處理拖放事件:重新實現 drag***Event()、dropEvent()

Bounding Rect

將 item 的外邊界定義為矩形,所有繪制必須限制在此區域內,QGraphicsView 使用它來確定 item 是否需要重繪。
雖然 item 的形狀可以是任意的(例如:直線、橢圓、矩形 ),但是 bounding rect 總是矩形,并且不受 item 變換的影響。

Shape

它是一個虛函數,具體需求依靠自己去實現。
以本地坐標中的 QPainterPath 形式返回 item 的形狀。形狀可用于許多事情,包括:碰撞檢測,命中測試以及 QGraphicsScene::items() 函數。
shape() 默認實現調用 boundingRect() 返回一個簡單的矩形形狀,但子類可以重新實現該函數,以返回非矩形 item 更準確的形狀。例如,一個圓形 item 可以選擇返回橢圓形狀,以便更好地進行碰撞檢測。
shape() 由 contains() 和 collidesWithPath() 的默認實現調用。

collidesWithItem

它用來判斷item與其他item是否有碰撞。

參考這篇博客:https://blog.csdn.net/chen_yi_long/article/details/8273644
多多少少 會有些 靈感

對于一些要生成特定item,依據實際需要添加,然后實現特定函數功能。可能 會結合 QPropertyAnimation QGraphicsItemAnimation QTime 實現一些特定效果

參考博客:https://www.cnblogs.com/klcf0220/p/10316510.html

總結

以上是生活随笔為你收集整理的自定义QGraphicsItem的全部內容,希望文章能夠幫你解決所遇到的問題。

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