我有一个自定义 QGraphicsView 和一个自定义 QGraphicsItem。如果我单击项目,我希望项目处理我的点击,否则我希望点击由视图处理。
但是当我点击该项目时,该项目会处理点击。还行吧。但是,如果我单击其他地方,则根本不会处理单击。我的类中与 mouseEvents 有任何关系的所有代码都在下面。
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";
}
似乎当我从 CustomItem 类中删除 mousePressEvent 函数并在 CustomView 中将 mousePressEvent 函数更改为:
void CustomView::mousePressEvent(QMouseEvent *event){
cout << "pressing in view";
}
CustomView 处理所有鼠标事件。
如何让 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 次,否则它将由场景和项目处理。
有任何想法吗?