QGraphicsScene图像位置像素图



我正在使用Qt图形框架来显示图像。我已经使用addPixmap()QGraphicsView的子类QGraphicsScene中打开了一个原始图像。我使用缩放功能添加了缩放功能,拖动模式设置为滚动手动拖动。现在,我需要在鼠标悬停时获得场景中的像素坐标,以便x和y值显示鼠标当前指向的图像(由像素图绘制(中的像素。我尝试使用pos(),但没有成功。

这是来自Widget.cpp:的代码

img = openImage(dirPath2.toLocal8Bit().data(),
                sizeX,sizeY,file_heade,scan_heade,bpp,sign);
QPixmap x = QPixmap(sizeX,sizeY);
x.convertFromImage(img,Qt::AutoColor);
scene->addPixmap(x);
ui->disp_img->setDragMode(QGraphicsView::ScrollHandDrag);

GraphicsScene.h:

class GraphicsScene : public QGraphicsScene {
public:
    GraphicsScene(QWidget *parent) : QGraphicsScene(parent){}
};

(最好是像素图坐标,但即使这样也不会发生,如果缩放时值发生变化,我将使用比例因子来获得原始值(

我建议您从阅读Qt的图形坐标系开始。

坐标系有不同的层次,你需要考虑与之打交道的那些层次。顶层是屏幕(或视图(,它是鼠标坐标所在的位置。

视图中的下一层是图形场景。图形项目,例如您使用addPixmap添加的QGraphicsPixmapItem,位于此处。图形场景可以被可视化为一个项目的世界,每个项目都有自己的位置和方向。

移动到最后一个坐标系是项目的局部坐标系。例如,如果我们取一个矩形,它可能具有(x,y,w,h(的局部坐标(-5,-5,10,10(。然后将此项目放置在场景中的某个位置。如果其位置是场景的原点(0,0(,则项目的局部坐标将与其场景坐标读取相同。

然而,如果我们在x轴上移动矩形+5个单位,它的局部坐标是相同的,但它的场景坐标现在是(0,-5,10,10(。

同样,视图(QGraphicsScene(是一个进入场景的窗口,可以查看整个场景,也可以只查看其中的一部分。由于视图的左上角坐标为(0,0(,它可能映射到场景的(0,0

因此,通过获取鼠标位置,您可以从视图的坐标开始,并需要转换到场景的坐标系。幸运的是,Qt在各个级别都为此提供了许多有用的功能。

若要将鼠标坐标从视图转换到场景,可以使用视图的mapToScene功能。

使用场景坐标,您可以获得一个项目,并使用该项目的mapFromScene将其映射到该项目的本地坐标。

最新更新