我已经检查了很多解决方案,但找不到适合我的解决方案。
我的应用程序中有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();
但它也没有帮助。
答案 0 :(得分:1)
您可以使用函数获取scene
的位置和绑定:
QGraphicsItem::sceneBoundingRect()
QGraphicsItem::scenePos()
所有项目首先在位置(0,0)
中添加,然后将其转换为正确的位置。您可以使用GraphicsView
坐标系并使用从视图到场景的坐标映射。为此,请使用:
QGraphicsView::mapToScene()
QGraphicsItem::mapToScene()
或
QGraphicsView::mapFromScene()
获取场景中的位置