在小孩QGraphicsScene

时间:2016-01-27 14:24:28

标签: qt qt5

在Qt5中,我有一个带有场景的主窗口:

MyWindow::MyWindow(QWidget *parent) : QMainWindow(parent)
{
    view = new QGraphicsView();
    scene = new QGraphicsScene();
    scene->installEventFilter(this);
    view->setScene(scene);
    ...
    setCentralWidget(view);
}

viewscene都是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。关于什么是错的任何线索?

1 个答案:

答案 0 :(得分:2)

QGraphicsSceneMouseEvent.pos()返回您点击的项目坐标中的位置。您的场景没有任何项目,因此返回(0,0)。如果你想获得场景坐标中的位置,请使用scenePos()。

const QPointF position = me->scenePos();