Qt,C ++:QGraphicsScene坐标不起作用

时间:2017-11-10 19:54:39

标签: c++ qt

我已经检查了很多解决方案,但找不到适合我的解决方案。

我的应用程序中有QGraphicsScene和QGraphicsView:

MyWindow::MyWindow()
{
space = new QGraphicsScene(this);
spaceView = new QGraphicsView(space);
spaceView ->setAlignment(Qt::AlignTop|Qt::AlignLeft);
}

我也有按钮,运行功能:

void MyWindow::addWidget()
{
    myWidget *w1= new myWidget(space);
    space->addItem(w1);

    myWidget *w2 = new myWidget(space);
    w2->setPos(10,10);
    space ->addItem(w2);
}

它添加了两个对象,但第二个应该在不同的坐标上(由(10,10)移动)。 当我不使用时:

spaceView ->setAlignment(Qt::AlignTop|Qt::AlignLeft);

移动作品,但所有项目都在我的视野中心 - 我不想让它居中。我需要它从左上角定位。使用" setAligment"我在上面改变位置的代码什么都不做。两个对象在同一个地方。有人能告诉我如何从左上角定位并使其可以移动它?

我不想使用:

space->setSceneRect(i.e. 0,0,1000,1000,Qt::);
因为我不想限制我在右侧的场景。 我也尝试过使用:

spaceView->fitInView();

但它也没有帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用函数获取scene的位置和绑定:

QGraphicsItem::sceneBoundingRect()
QGraphicsItem::scenePos()

所有项目首先在位置(0,0)中添加,然后将其转换为正确的位置。您可以使用GraphicsView坐标系并使用从视图到场景的坐标映射。为此,请使用:

QGraphicsView::mapToScene()
QGraphicsItem::mapToScene()

QGraphicsView::mapFromScene()

获取场景中的位置