gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:52:01 25 4
gpt4 key购买 nike

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

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

一些代码:我的场景.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();
}

最佳答案

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() 返回。无需进行不必要的转换。

关于c++ - Qt: QGraphicsScene 鼠标位置总是 (0,0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47498771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com