我创建了自己的类,该类继承自 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)
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()
。不需要不必要的转换。