查找QGraphicsScene的中心位置

Find the center position of a QGraphicsScene?

本文关键字:位置 QGraphicsScene 查找      更新时间:2023-10-16

我尝试使用以下代码为场景添加一行:

    line = new QGraphicsLineItem(200,55,200,55);
    mscene.addItem(ruler);

但似乎QGraphicsLineItem的坐标从左角开始。我不想以任何方式改变起源。我只想检索qgraphicscene/qgraphicview的中心位置坐标。我应该使用什么功能?

line = new QGraphicsLineItem(200,55,200,55);
mscene.addItem(ruler);

作为QGraphicsLineItem的此构造函数的文档状态:-

构造一个QGraphicsLineItem,使用(x1,y1)和(x2,y2)之间的行作为默认行

这将创建一个QGraphicsLineItem,其局部坐标为(200,55,200,55),因此您要创建的线的起点和终点坐标在同一点(200,55%)。

一旦创建了线对象并将其添加到场景中,就可以通过调用setPos来设置其位置。要获得场景的中心位置,可以使用QGraphicsScene::width()和QGraphicsSene::height():-

// Assuming pScene is a pointer to the QGraphicsScene
line->setPos(pScene->width()/2, pScene->height()/2);

QGraphicsView只是一个观察场景的窗口,因此它可能比场景小。在这种情况下,项目可能在场景的中心,但不会出现在视图的中心。

您可以通过调用QGraphicsView::centerOn(const QGraphicsItem*item)来将视图集中在项目上

您可以在coodrinate系统之间进行映射。要获得场景坐标中的屏幕中心,请计算视口的中心,然后进行映射到场景:

myView.mapToScene(myView.viewport()->rect().center()) 

您可以在以下网站上阅读更多关于坐标映射的信息:[https://doc.qt.io/archives/4.6/graphicsview.html#item-坐标][1]