我有一個從QGraphicsScene
和它自定義的項目派生的場景對象,從QGraphicsItem
派生。 我希望這個項目對於鼠標事件是「透明的」,所以點擊項目區域將會調用 QGraphicsScene::mousePressEvent()
;將鼠標事件從QGraphicsItem傳遞到QGraphicsScene
從文檔:
「...要禁用鼠標事件爲一個項(即,使它透明用於 鼠標事件),呼叫setAcceptedMouseButtons(0)」。
但是,如果點擊項目區域,場景仍然不會收到mouce事件。
MyItem::MyItem(QGraphicsItem * parent) :
QGraphicsItem(parent)
{
setAcceptedMouseButtons(Qt::NoButton);
}
QRectF MyItem::boundingRect() const
{
return QRectF(0,0,100,100);
}
void MyItem::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
painter->fillRect(boundingRect(),QColor(0,0,160,10));
}
那麼我該如何忽略項目的鼠標事件?
這是可能的然後我將需要處理鼠標事件的項目,所以可能是正確的決定是實現QGraphicsItem :: mousePressEvent(),只是爲了傳遞事件到現場。
謝謝@ marek -r,你完全正確!我在場景實現中發現了這個:'if(itemAt(mouseEvent-> scenePos())== NULL){...}'。 – folibis