2014-03-04 65 views
1

我有一個從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(),只是爲了傳遞事件到現場。

回答

0

你把事情搞砸了。 QGraphicsScene始終處理所有鼠標事件!在場景中是responsible for passing those events to its childrenQGraphicsItem)。所以場景接收鼠標事件,然後事件傳遞給場景中的相應項目。

所以如果item不接受鼠標事件,這並不意味着場景會再次處理鼠標事件。

它看起來像你搞砸了一些東西,當你做了一個場景的子類。

底線你的問題是錯誤的。

+0

謝謝@ marek -r,你完全正確!我在場景實現中發現了這個:'if(itemAt(mouseEvent-> scenePos())== NULL){...}'。 – folibis

相關問題