我尝试使用以下代码在场景中添加一行:
line = new QGraphicsLineItem(200,55,200,55);
mscene.addItem(ruler);
但似乎QGraphicsLineItem的坐标从左角开始。 我不想以任何方式改变原点。我想检索qgraphicsscene / qgraphicsview的中心位置坐标。 我应该使用什么功能?
答案 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>
将视图置于中心位置