1

Qt の Qpainter を使用して描画とペイントを行う QuantumGIS をカスタマイズしています...

メッセージキューを介して更新されるポリラインをキャンバスに描画しようとしています..描画は非常にうまくいきます...しかし、更新として取得するポリラインまたはポリゴンオブジェクトには、角度フィールドも含まれていますオブジェクトの回転に使用します。問題は、ポリラインがqpainterによって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();

助けていただければ幸いです。ありがとう。

4

2 に答える 2

1

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

QPainter ドキュメントのCoordinate Transformations セクションを読んだり、関連する例を試したりすることもお勧めします。

于 2009-05-28T08:49:30.907 に答える