사용자 지정 QGraphicsView 및 사용자 지정 QGraphicsItem이 있습니다. 항목을 클릭하면 항목이 내 클릭을 처리하도록하고, 그렇지 않으면보기가 처리하도록합니다.MousePressEvent보기 및 Qt의 항목
하지만 항목을 클릭하면 항목이 클릭을 처리합니다. 괜찮아. 그러나 다른 곳을 클릭하면 클릭이 전혀 처리되지 않습니다. 내 수업에서 마우스 이벤트와 관련이있는 코드는 모두 아래에 있습니다.
void CustomView::mousePressEvent(QMouseEvent *event){
cout << "pressing in view";
}
있는 CustomView 모든 MouseEvent는 처리 :
class CustomView : public QGraphicsView
{
Q_OBJECT
public:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
void CustomView::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in view";
}
class CustomItem : public QGraphicsItem
{
public:
CustomItem(CustomView* widget)
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
CustomItem::CustomItem(CustomView* widget){
setFlag(ItemIsSelectable);
setFlag(ItemIsMovable);
}
void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in item";
}
내가에있는 CustomView에 CustomItem에 클래스 변경에서 mousePressEvent 기능을 mousePressEvent 기능을 제거 할 때 것으로 보인다.
어떻게하면 CustomItem이 항목의 클릭을 처리하고 CustomView가 다른 모든 클릭을 처리하게 할 수 있습니까?
감사합니다.
class CustomView : public QGraphicsView
{
Q_OBJECT
public:
};
class CustomScene : public QGraphicsScene
{
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
void CustomScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in scene";
}
class CustomItem : public QGraphicsItem
{
public:
CustomItem(CustomView* widget)
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
CustomItem::CustomItem(CustomView* widget){
setFlag(ItemIsSelectable);
setFlag(ItemIsMovable);
}
void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in item";
}
장면에서 클릭 만 항목에 현장에서 처리되지 :
편집
그래서 지금은 그것을 변경되었습니다. 그러나 항목 의 클릭은 항목 자체에서 처리되지 않으며 대신 장면에서 처리됩니다. 항목에서 실제로 빠르게 2 번 클릭하지 않으면 장면과 항목에 의해 처리됩니다.
아이디어가 있으십니까?
QGraphicsView 대신 QGraphicsScene :: mousePressEvent (QGraphicsSceneMouseEvent * mouseEvent) 메서드를 재정의하려고 시도하십시오. – Kunal
"CustomWidget :: mousePressEvent"가 "CustomView :: mousePressEvent"(또는 그 반대)라고 생각합니다. – Anthony
@Kunal Ty 입력 한대로 mousePressEvent를 장면으로 옮겼지만 여전히 문제가 있습니다 – fibera