カスタム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はすべてのmouseEventを処理します。
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回速くクリックしない限り、シーンとアイテムによって処理されます。
何か案は?