2013-06-24 4 views
2

Я знаю, как передавать события из сцены qgraphics в q графический элемент, но проблема в этом случае, события мыши для сцены выполняются.пропуская mouseEvents qgraphicsitem в сцене qgraphics

, например, в коде ниже при нажатии на пункте выход «пользовательская сцена нажата»

#include <QtGui> 
class CustomScene : public QGraphicsScene 
{ 
protected: 
    void mousePressEvent(QGraphicsSceneMouseEvent *event) 
    { 
     if(itemAt(event->pos())) 
      QGraphicsScene::mousePressEvent((event)); 
     else 
     qDebug() << "Custom scene clicked."; 
    } 
}; 
class CustomItem : public QGraphicsRectItem 
{ 
protected: 
    void mousePressEvent(QGraphicsSceneMouseEvent *event) 
    { 
     qDebug() << "Custom item clicked."; 
    } 
}; 
int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    CustomItem item; 
    item.setRect(20, 20, 60, 60); 
    CustomScene scene; 
    //scene().set 
    scene.addItem(&item); 
    QGraphicsView view; 
    view.setScene(&scene); 
    view.show(); 
    return a.exec(); 
} 

ответ

1

Смотрите документацию QGraphicsSceneMouseEvent::pos:

Возвращает положение курсора мыши в пункте координаты.

Это означает, что если мышь находится на расстоянии 10 пикселей от верхней и левой границы вашего предмета, вы получите (10,10) в виде координат независимо от того, где на сцене находится объект.

Что вам нужно QGraphicsSceneMouseEvent::scenePos:

Возвращает положение курсора мыши в координатах сцены.

Изменить if -statement на:

if(itemAt(event->scenePos())) 
    QGraphicsScene::mousePressEvent((event)); 
else 
    qDebug() << "Custom scene clicked."; 
+0

большое спасибо! :) – Radwa