2009-07-20 5 views
7

私は、コードのこの部分をいじるされていない:はなぜQGraphicsItemは:: scenePos()(0,0)を返す保つ

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()はローカル座標系内ではなく、シーン内の線の位置を返すと考えられました。私は間違って何をしていますか?

答えて

17

QT 4.5のドキュメントを慎重にaddLineで読んだ後、間違っていたことが分かります。ドキュメントによると:

注意項目のジオメトリは アイテム座標で提供され、その 位置に初期化されていることを(0、0)

をだから私は(50,50 addLineを指定した場合、100、100)、私は実際にローカルアイテムの座標を変更しています。私はシーン座標が間違っているか、根拠がないものとして扱われることを前提にしていました。私がやるべきことは、その後どこに移動しsetPos()を使用するIは、シーン内の描画によってラインを追加していた場合ので、私は(0,0)にその中心をリセットする必要があり、この

// 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

私はこの狩りに1午後過ごしました!どうもありがとうございます! (このスレッドが3歳であっても) – HWende

関連する問題