我有一個自定義的QGraphicsView和一個自定義的QGraphicsItem。如果點擊該項目,我希望項目處理我的點擊,否則我希望點擊由視圖處理。MousePressEvent中的視圖和項目Qt
但是,當我點擊該項目,該項目處理點擊。還行吧。但是,如果我點擊其他地方的點擊根本不處理。下面是我的類中與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";
}
看來,當我從定製項目類和變化刪除mousePressEvent功能在CustomView的mousePressEvent功能:
void CustomView::mousePressEvent(QMouseEvent *event){
cout << "pressing in view";
}
的CustomView處理所有mouseEvents。
我該如何讓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";
}
A單擊在現場,但沒有一個項目通過現場得到處理。但物品 中的點擊不會被物品本身處理,而是由場景處理。除非您在場景和物品處理的物品上快速點擊2次。
任何想法?
嘗試重寫'QGraphicsScene :: mousePressEvent(QGraphicsSceneMouseEvent * MouseEvent)方法在QGraphicsScene'方法,而不是的QGraphicsView – Kunal 2012-04-10 04:26:49
我想你 「CustomWidget :: mousePressEvent」 應該是 「CustomView :: mousePressEvent」(反之亦然)。 – Anthony 2012-04-10 04:42:37
@Kunal Ty爲您的輸入,我將鼠標移動到現場,但我仍然有問題 – fibera 2012-04-10 17:22:40