QGraphicsItem执行鼠标事件让QGraphicsView继续执行鼠标事件 C++
时间: 2023-09-11 20:07:22 浏览: 75
当一个 QGraphicsItem 处理了鼠标事件并且不希望 QGraphicsView 继续处理该事件时,可以使用 QGraphicsItem::setAccepted(false) 方法来通知 QGraphicsView 不要继续处理该事件。这个方法将会阻止事件传递到 QGraphicsView 层次结构中更高层次的项。
如果你希望 QGraphicsItem 处理该事件并且同时让 QGraphicsView 继续处理该事件,可以调用 QGraphicsItem::setAccepted(true) 方法,这会允许事件传递到 QGraphicsView。
以下是一个示例代码:
```cpp
class MyItem : public QGraphicsItem
{
public:
MyItem(QGraphicsItem *parent = Q_NULLPTR) : QGraphicsItem(parent) {}
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
{
// 处理鼠标事件
qDebug() << "MyItem mousePressEvent";
// 不让事件传递到 QGraphicsView
setAccepted(false);
}
};
class MyView : public QGraphicsView
{
public:
MyView(QWidget *parent = Q_NULLPTR) : QGraphicsView(parent) {}
protected:
void mousePressEvent(QMouseEvent *event) override
{
// 处理鼠标事件
qDebug() << "MyView mousePressEvent";
// 让父类继续处理该事件
QGraphicsView::mousePressEvent(event);
}
};
```
在上面的示例中,当 MyItem 接收到鼠标事件时,它会处理该事件并且不让事件传递到 QGraphicsView。而当 MyView 接收到鼠标事件时,它会处理该事件并且让 QGraphicsView 继续处理该事件。这样可以实现在 QGraphicsItem 中处理鼠标事件并且让 QGraphicsView 继续处理该事件的效果。
阅读全文