找到QGraphicsScene的中心位置?

时间:2014-10-28 06:39:15

标签: c++ qt qgraphicsscene

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

您可以在以下位置阅读有关坐标映射的更多信息: [http://doc.qt.digia.com/4.6/graphicsview.html#item-coordinates][1]

答案 1 :(得分:3)

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

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

  

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

这将创建一个QGraphicsLineItem,其中本地坐标为(200,55,200,55),因此您创建的行在同一点具有起点和终点坐标(200 ,55)。

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

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

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

您可以通过调用QGraphicsView::centerOn(const QGraphicsItem * item)

将视图置于中心位置