QGraphicsScene的碰撞檢測

2021-08-01 11:12:38 字數 1792 閱讀 5551

實現效果如下

圖1 移動的item碰撞顯示

圖2 碰撞的item都顯示

使用scene的碰撞檢測函式

qlist< qgraphicsitem *> collidingitems(const qgraphicsitem *item, qt::itemselectionmode mode = qt::intersectsitemshape) const
文件解釋

of all items that collide with

item. collisions are determined by calling qgraphicsitem::collideswithitem(); the collision detection is determined by mode. by default, all items whose shape intersects item

oris contained inside item's shape are returned.

the items are returned in descending stacking order (i.e., the

first

item

inthe

list

isthe uppermost item, and

thelast

item

isthe lowermost item).

可以檢視一下collidingitems的原始碼

qlist qgraphicsscene::collidingitems(const qgraphicsitem *item, qt::itemselectionmode mode) const                                  

// does not support itemignorestransformations.

qlist tmp;

//獲取scene全部範圍的item

const auto itemsinvicinity = d->index->estimateitems(item->sceneboundingrect(), qt::descendingorder);

for (qgraphicsitem *iteminvicinity : itemsinvicinity)

return tmp;

}

首先實現移動的item碰撞顯示

主要**如下:

//重寫mousemoveevent函式,當有碰撞item時讓其變色

void

graphicsitem::mousemoveevent(qgraphicsscenemouseevent *ev)

實現碰撞的item都顯示

//重寫paint

//由於paint是每次介面重繪都需要呼叫的函式,所以當2個item碰撞時,兩者都觸

//發相同的函式(**)所以兩者都變色

void graphicsitem::paint(qpainter *painter, const qstyleoptiongraphicsitem *option, qwidget *widget)

Qt 刪除QGraphicsScene中的Item

原文 管理qgraphicsscene中的items其實不是很方便,本文操作的是刪除qgraphicsscene中的item 要執行此操作首先需要在新增item的時候設定item為可被選中 中是獲取選中的item列表 迴圈刪除item列表中的items 新增item qreal x 20404614...

container of 的的的原理

另外一篇,同樣精彩,揭開linux核心中container of的神秘面紗 華清遠見嵌入式學院講師。在linux 核心中有乙個大名鼎鼎的巨集container of 這個巨集是用來幹嘛的呢?我們先來看看它在核心中是怎樣定義的。呵呵,乍一看不知道是什麼東東。我們先來分析一下container of p...

存在的就是合理的,發生的即是必然的。

筆者有時候會想,什麼是對,什麼是錯?對於追求某一件事情之前首先會考慮,為什麼我要做這件事情。所以經過自我分析和生活周邊環境的總結。我認為,對於乙個人來,這是在站在個體的角度上說。什麼是對的?就是你自己覺得是對的,它就是對的。不過這個只是你自己的想法。主觀上的正確,不代表客觀上也受到了別人的認可。就拿...