【问题标题】:Qt, C++: QGraphicsScene coordinates are not workingQt、C++:QGraphicsScene 坐标不起作用
【发布时间】:2017-11-11 04:32:22
【问题描述】:

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

我的应用中有 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();

但它也没有帮助。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

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

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

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

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

    QGraphicsView::mapFromScene()
    

    获取现场位置

    【讨论】:

    • 您对使用功能检查边界的建议帮助我找出了为什么我的对象没有改变位置。在 myWidget 中,我在场景中绘制了另一个对象,要更改它的位置,我只需要使用“w2->rect2->pos(10,10);”。感谢您提供这些有用的功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2023-04-10
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多