1

多数の QGraphicsScene アイテムからリテラル マップを表示する Qt (現在 4.8) を使用してアプリを作成しています。ビューにスケールで注釈を付けたいと思います。スケールに対する私の要件は、ビューポート ウィジェットに関して永続的に固定されることです。ビューの縮尺が変更されるたびに更新する必要があります (ズームインなど)。他にも可能なオーバーレイアイテム(コンパスなど)があるため、一般的なソリューションをお勧めします。

これに関する以前の質問を見てきました。

  • ItemIgnoresTransform の使用
  • オーバーレイ ピックスマップを使用します。

IgnoresTransform を試してみましたが、その方法は正しく機能しませんでした: ビューポートの下隅 (たとえば) に固定する方法がわかりませんでした。テキストと線を常に正しいサイズで表示するのに苦労していました。 .

私はそれを廃棄し、QGraphicsView をサブクラス化し、paintEvent を再実装してオーバーレイ ピックスマップを追加し (元のピックスマップを呼び出してから、オーバーレイ ピックスマップを上に描画します)、配置オプションを追加して、それがどこに行くかを示しました。いくつかのピックスマップ ペイント コードをコーディングすると、ビューで使用可能なスケールが生成されます。わーい!...しかし、スクロールでは機能しません-スケールの「粉々になった」レンダリングが全体に表示されるか、スケールがまったくない場合があります。これは QGraphicsView::scrollViewportBy() が viewport()->scroll() を使用しているためだと思うので、ViewportSmartUpdate に切り替えると役立つかどうか疑問に思いましたが、十分には役に立ちません。ViewportFullUpdate に切り替えると、アプリの速度が大幅に低下する可能性があるため、切り替えたくないです (シーンには何百万ものアイテムがあり、移動するだけで完全に再描画する必要があります)。

そう。ここから何かアイデアはありますか?ビューポートにオーバーレイされる新しいほとんど透明なウィジェットに書き込むようにピックスマップ コードを適合させることは、より良い方法でしょうか?

助けてくれてありがとう...

4

1 に答える 1

1

これは最善の方法ではないかもしれませんが、過去に、シーン内の QGraphicObjects と同じグラフィック スタイルを持つ QGraphicsView / QGraphicsScene を保持するウィンドウにカスタム ウィジェットを追加しました。ビューを使用してシーン内のオブジェクトまたはシーン自体を移動すると、ウィンドウ上のアイテムは同じ場所に残ります。
それが役立つことを願っています。

于 2013-04-25T08:40:06.473 に答える