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

时间:2017-11-26 17:07:18

标签: 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();
}

1 个答案:

答案 0 :(得分:4)

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();
}

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