У меня есть пользовательский QGraphicsView и пользовательский QGraphicsItem. Я хочу, чтобы Item обрабатывал мой клик, если я нажимаю элемент, иначе я хочу, чтобы щелчок обрабатывался View.MousePressEvent в поле зрения и элементы в Qt
Но когда я нажимаю на элемент, элемент обрабатывает щелчок. Хорошо. Но если я щелкнув в другом месте, клик не обрабатывается вообще. Весь код в моих классах, который имеет какое-либо отношение к 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";
}
Кажется, что когда я удалить функцию mousePressEvent из класса CustomItem и изменения в CustomView функцию mousePressEvent к:
void CustomView::mousePressEvent(QMouseEvent *event){
cout << "pressing in view";
}
CustomView обрабатывает все mouseEvents.
Как я могу позволить CustomItem обрабатывать клики в элементах, а CustomView обрабатывает все остальные клики?
спасибо.
EDIT
Так что теперь я изменил его:
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 раза очень быстро на предметы, они будут обработаны сценой и элементом.
Любые идеи?
попробовать перекрывая 'QGraphicsScene :: mousePressEvent (QGraphicsSceneMouseEvent * MouseEvent)' метод в QGraphicsScene, а QGraphicsView – Kunal
Я думаю, что ваш "CustomWidget :: mousePressEvent" должно быть "CustomView :: mousePressEvent" (или наоборот). – Anthony
@ Kunal Ty для вашего ввода, я переместил mousePressEvent на сцену, но у меня все еще есть проблема с этим – fibera