Qt:QGraphicsScene 鼠标位置总是 (0,0)

Liz*_*zyk 4 c++ qt

我创建了自己的类,该类继承自 QGraphicsScene。我还为鼠标事件制作了两种方法。后来我做 qDebug() 来检查我的点击位置是否正确,看起来它不正确。它总是返回我 QPoint(0,0)。

我已经尝试了很多 mapfrom - 的东西,但没有任何效果。有没有办法让这些职位正常工作?

一些代码:MyScene.cpp

#include "pianoscene.h"
#include <QDebug>
#include <QGraphicsView>

MyScene::MyScene()
{
    /*setRect(0,0,100,100);
    QGraphicsRectItem *kek = new QGraphicsRectItem;
    QPen pen;
    pen.setColor(Qt::red);
    kek->setRect(0,0,50,50);
    kek->setPen(pen);
    this->addItem(kek);*/
}

void MyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    QPoint punkt = views().first()->mapFromScene(event->pos().toPoint());
    qDebug()<<"wcisk"<<punkt;
}

void MyScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug()<<"wcisk"<<event->pos();
}
Run Code Online (Sandbox Code Playgroud)

Nik*_* C. 8

pos()包含项目坐标,而不是场景坐标。要获取场景坐标,请使用scenePos()

void MyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    QPoint punkt = views().first()->mapFromScene(event->scenePos().toPoint());
    qDebug()<<"wcisk"<<punkt;
}

void MyScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug()<<"wcisk"<<event->scenePos();
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您只需要将坐标传播到其他函数,请不要使用toPoint(). 如果你没有实际的理由转换为QPoint,只使用QPointF,通过返回的scenePos()pos()。不需要不必要的转换。