我知道如何將事件從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