私はカスタムQGraphicsViewとカスタムQGraphicsItemを持っています。アイテムをクリックするとアイテムにクリックが処理され、そうでなければビューで処理されるようにします。ビュー内のMousePressEventとQtのアイテム
しかし、アイテムをクリックすると、そのアイテムがクリックを処理します。これで結構です。しかし、他の場所をクリックすると、クリックはまったく処理されません。私のクラスの中で、mouseEventsと何か関係のあるコードはすべて下にあります。
void CustomView::mousePressEvent(QMouseEvent *event){
cout << "pressing in view";
}
のCustomViewは、すべての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";
}
私がするの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";
}
シーンでのクリックが、項目にシーンによって処理されませ:
EDIT
は、だから今、私はそれを変更しました。しかし、アイテム のクリックはアイテム自体によって処理されず、代わりにシーンによって処理されます。本当に素早く2回クリックするのでなければ、シーンとアイテムによって処理されます。
アイデア?
QGraphicsViewではなくQGraphicsScene :: mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent)メソッドをオーバーライドしてください。 – Kunal
"CustomWidget :: mousePressEvent"が "CustomView :: mousePressEvent"(またはその逆)であると思います。 – Anthony
あなたの入力の@Kunal Ty、私はシーンにmousePressEventを移動しましたが、まだ問題があります – fibera