在Qt5中,我有一个带有场景的主窗口:
MyWindow::MyWindow(QWidget *parent) : QMainWindow(parent)
{
view = new QGraphicsView();
scene = new QGraphicsScene();
scene->installEventFilter(this);
view->setScene(scene);
...
setCentralWidget(view);
}
view
和scene
都是MyWindow
的私人成员。 我想知道,在MyWindow
课程中,点击场景时的鼠标位置。这就是我使用上面installEventFilter
的原因。我试图用这个来抓住这个事件:
bool MyWindow::eventFilter(QObject *target, QEvent *event)
{
if (target == scene)
{
if (event->type() == QEvent::GraphicsSceneMousePress)
{
const QGraphicsSceneMouseEvent* const me = static_cast<const QGraphicsSceneMouseEvent*>(event);
const QPointF position = me->pos();
cout << position.x() << "," << position.y() << endl;
}
}
return QMainWindow::eventFilter(target, event);
}
此代码无法正常工作:单击场景时打印的位置始终为0,0。关于什么是错的任何线索?
答案 0 :(得分:2)
QGraphicsSceneMouseEvent.pos()
返回您点击的项目坐标中的位置。您的场景没有任何项目,因此返回(0,0)。如果你想获得场景坐标中的位置,请使用scenePos()。
const QPointF position = me->scenePos();