我创建了自己的继承自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();
}
答案 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
,请使用QPointF
和scenePos()
返回的pos()
。无需进行不必要的转换。