【问题标题】:Why does QGraphicsItem::scenePos() keep returning (0,0)为什么 QGraphicsItem::scenePos() 不断返回 (0,0)
【发布时间】:2010-11-12 05:13:58
【问题描述】:

我一直在玩弄这段代码:

QGraphicsLineItem * anotherLine = this->addLine(50,50, 100, 100);
qDebug() << anotherLine->scenePos();

QGraphicsLineItem * anotherLine2 = this->addLine(80,10, 300, 300);
qDebug() << anotherLine2->scenePos();

this 指针指向QGraphicsScene。在这两种情况下,我都得到QPointF(0,0) 的两个输出。
通过阅读文档,我认为scenePos() 应该返回场景中线条的位置,而不是它在其局部坐标系中的位置。我做错了什么?

【问题讨论】:

    标签: c++ qt qgraphicsitem qgraphicsscene


    【解决方案1】:

    仔细阅读addLine 上的 QT 4.5 文档后,我意识到自己做错了什么。根据文档:

    请注意,该项目的几何形状是 在项目坐标中提供,及其 位置初始化为 (0, 0)

    所以如果我指定 addLine(50,50, 100, 100),我实际上是在修改它的本地项目坐标。我假设它将被视为场景坐标是错误的或没有根据的。我应该做的是这个

    // Create a line of length 100
    QGraphicsItem * anotherLine = addLine(0,0, 100, 100); 
    
    // move it to where I want it to be within the scene
    anotherLine->setPos(50,50);
    

    因此,如果我通过在场景中绘制来添加一条线,我需要将其中心重置为 (0,0),然后使用 setPos() 将其移动到我希望它在场景中的位置。

    希望这对遇到同样问题的人有所帮助。

    【讨论】:

    • 我花了一个下午的时间来寻找这个!太感谢了! (即使这个线程是 3 岁)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2017-09-15
    • 2018-12-17
    相关资源
    最近更新 更多