我知道如何将事件从qgraphicsview传递给qgraphicsitem。 但问题是在执行mouseEvent项后,我必须执行视图的鼠标事件,这在我的情况下是不可取的。 所以,问题是:“是否有一种智能的方法来确定mousePress是在物品上还是在空的空间上?”如何仅执行qgraphicsitem的mouseevent? (忽略qgraphicsview的其余mouseevent)
编辑:工作代码:
#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场景,而不是观点
#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();
}
谢谢你:)它的工作原理! – Radwa
嘿,跟进问题,如果我可以...当我执行itemAt(event-> pos())我得到QGraphicsItem(0)。我怎样才能“知道”这是QGraphicsView的视口?试图确定何时点击这里的空白空间。 – Dariusz