8

私はこのコードをいじっています:

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()私は何を間違っていますか?

4

1 に答える 1

20

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() を使用してシーン内の配置したい場所に線を移動する必要があります。

これが同じ問題に遭遇した人に役立つことを願っています。

于 2009-07-20T06:24:26.820 に答える