2009-05-09 8 views
1

...Qpainter.rotate()の質問は - 私がメッセージキューを通じて更新として来ているキャンバス上にポリラインを描画しようとしています、私はQtのQPainterの描画とペイントするために使用するQuantumGISをカスタマイズしています

をQGIS。 。描画は非常に細かいです...しかし、私が更新として得るポリラインまたはポリゴンオブジェクトには、オブジェクトの回転に使用される角度フィールドも含まれています。 問題は、painter.rotate()メソッドを使用してポリラインを描画する直前に線を回転しようとすると、線は回転しますが線の位置は変化し、ズームごとに変化しますQgisキャンバスのパンです。 painter.rotate()を設定する前に、私はペインタの状態を保存しています。描画した後、OpenGLのpush/popMatrix関数に類似した状態を再び復元します。 Qpainterの保存復元機能は、openglのpush/popMatrix関数と同様に動作しますか?ここ

は、コードスニペットです:

p->save(); 
    //p->rotate(45); 
    p->scale(1.0/rasterScaleFactor, 1.0/rasterScaleFactor); 
    p->drawPolyline(pa); 
    p->restore(); 

ヘルプが理解されます。おかげさまで

答えて

1

でこの質問をするだろうとあなただけの「現在の画家の状態を保存します」)QPainterのは::(保存していることがわかります。変換はリセットされません。あなたの問題は、元の変換行列が独自の縮尺または回転と混在するためです。あなたのコードスニペットは小さすぎて絵のコンテキストを理解できませんが、おそらくQPainter::setTransform()を使用して、ポリラインペイントの前に適切に変換をリセットまたは変更する必要があると思います。

座標変換セクションをQPainter documentationに読み込んだり、related exampleを試してみることをおすすめします。