gpt4 book ai didi

c++ - 如何只执行qgraphicsitem的mouseevent? (忽略 qgraphicsview 的其余 mousevent)

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:31 25 4
gpt4 key购买 nike

我知道如何将事件从 qgraphicsview 传递到 qgraphicsitem。但问题是在执行 item 的 mouseEvent 之后,我必须执行 View 的鼠标事件,这在我的情况下是不可取的。所以,问题是:“是否有一种聪明的方法来知道 mousePress 是在一个项目上还是在一个空白区域上?”

编辑:工作代码:

#include <QtGui>

class CustomView : public QGraphicsView
{

protected:
void mousePressEvent(QMouseEvent *event)
{
QGraphicsView::mousePressEvent(event);
qDebug() << "Custom view clicked.";

}
};

class CustomItem : public QGraphicsRectItem
{
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Custom item clicked.";
}
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

CustomItem item;
item.setRect(20, 20, 60, 60);

QGraphicsScene scene(0, 0, 100, 100);
scene.addItem(&item);

CustomView view;
view.setScene(&scene);
view.show();
return a.exec();
}

在 qgraphics 场景而不是 View 中应用相同的概念

#include <QtGui>
class CustomScene : public QGraphicsScene
{
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if(itemAt(event->scenePos()))
QGraphicsScene::mousePressEvent((event));
else
qDebug() << "Custom view clicked.";
}
};
class CustomItem : public QGraphicsRectItem
{
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "Custom item clicked.";
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
CustomItem item;
item.setRect(20, 20, 60, 60);
CustomScene scene;
//scene().set
scene.addItem(&item);
QGraphicsView view;
view.setScene(&scene);
view.show();
return a.exec();
}

最佳答案

有 3 种正确的方法可以解决您的任务:

1. 重新实现 QGraphicsView::mousePressEvent 并使用 QGraphicsView::itemAt 找到点击的项目。

2. 子类 QGraphicsScene 并重新实现 QGraphicsScene::mousePressEvent。它的参数 event 包含场景坐标中的位置,您可以使用 QGraphicsScene::itemAt 确定哪个项目被点击。

3. 子类 QGraphicsItem(或任何派生类)并重新实现 QGraphicsItem::mousePressEvent。仅当单击此元素时才会调用它。

关于c++ - 如何只执行qgraphicsitem的mouseevent? (忽略 qgraphicsview 的其余 mousevent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com