QGraphicsView
があり、QGraphicsScene
と表示されています。ユーザーは、ボタンを使用してシーンをズームおよびパンすることができます。この操作は、scale()
などのQGraphicsView
関数で実現されます。 ここでは、透明なピックスマップを描画したいと思います。このピクセルマップは、ユーザーの操作によって変形されません。 graphicsView
と別の場所に置くにはどうすればよいですか?Qt GraphicsScene:新しいレイヤーを作成する方法は?
答えて
あなたがシーン変換の完全独立してQGraphicsView
上に描画するために何かをしたい場合、あなたはQGraphicsView
のサブクラスを作成し、それらのアイテムを描くことができます(オーバーライドされた)paintEvent
メソッドの一部として
void MyView::paintEvent(QPaintEvent *event) {
// Call the base paintEvent to do the "normal" stuff.
QGraphicsView::paintEvent(event);
// Paint your other stuff. Note that you have to create the QPainter on
// the viewport.
QPainter painter(viewport());
painter.setBrush(QBrush(Qt::black));
// ... etc.
}
スケールを適用したくないpixmapアイテムにQGraphicsItem::ItemIgnoresTransformations
フラグを追加できます。
項目は継承された変換(すなわち、その位置は まだ親に固定されているが、親またはビューの回転、ズーム又は 剪断変換が無視される)を無視します。このフラグは、 のテキストラベル項目を水平にして、スケーリングしないようにするのに便利です。したがって、ビューが変形されても、 が表示されます。設定すると、アイテムのビュー のジオメトリとシーンのジオメトリは個別に管理されます。 ビューで座標をマップし、衝突を検出するためにdeviceTransform()を呼び出さなければなりません。デフォルトでは、このフラグは無効です。このフラグは Qt 4.3で導入されました。注:このフラグを設定すると、項目自体の縮尺を変更することができます。 となり、その尺度変換が項目の子に影響します。
はそれを行うためsetFlag
機能を使用します。
pixmapItem->setFlag(QGraphicsItem::ItemIgnoresTransformations);
このフラグは、GraphicsViewが、たとえばensureVisible()などでアイテムから離れて見えることを防ぎません。 –
このフラグは、ビューが拡大縮小された場合にのみアイテムに影響します。シーンパニングを処理するフラグはありません。このフラグ以外のオブジェクトを常に同じ位置に表示したい場合は、シーンの再描画が行われるたびにこれらのアイテムのsetPosを明示的に呼び出す必要があります。 – pnezis
私はDaveの答えが好きです。良い方法になる単純なHUDのために。しかし、サブクラス化や手動ペイントなしで、このようなことを行うことができます.2つのシーンと2つのビューを作成し、それらをQGridLayoutの同じ場所に重ねて配置するだけです。したがって、あなたは2つの完全に独立した "レイヤー"を望み通りに持っています。
- 1. Qt GraphicsScene on Widget
- 2. Qt新しいxlsファイルを作成する方法
- 3. scapyで新しいレイヤーまたは新しいプロトコルを作成するには?
- 4. Docker EXPOSEは新しいレイヤーを作成しますか?
- 5. Qt GraphicsSceneは常に再描画します
- 6. HTML5 Canvasでレイヤーを作成する最も良い方法は?
- 7. AppleScript/Photoshop:画像で新しいレイヤーを作成する
- 8. Caffeで新しいレイヤーを作成する
- 9. Qtでテキストファイルを作成する方法
- 10. アンドロイドアプリで画像のレイヤーを作成する方法は?
- 11. UIをカスタマイズするQTプラグインを作成する方法は?
- 12. OpenLayers DrawFeatureは新しいレイヤーを生成します
- 13. BrainTreePaymentsは新しい支払い方法を作成します
- 14. Rails:ActiveRecordの作成方法と新しい方法の違いは?
- 15. 新しいJSPページを作成するメソッドの作成方法は?
- 16. cloud9 IDEで新しいgitブランチを作成、削除、作成する方法は?
- 17. フレームに新しいイメージを作成する方法は?
- 18. 新しいユーザーjazn-data.xmlをプログラムで作成する方法は?
- 19. Version.Lucene_35で新しいLuceneドキュメントを作成する方法は?
- 20. MoinMoinに新しいページをプログラムで作成する方法は?
- 21. Tracで新しいプロジェクトを作成する方法は?
- 22. 新しいスレッドでクラスを作成する方法は?
- 23. 新しいExchangeパブリックフォルダを作成する方法は?
- 24. arangodbで新しいユーザーアカウントを作成する方法は?
- 25. AEMで新しい検索フォームを作成する方法は?
- 26. Firebaseで新しいDatabaseErrorインスタンスを作成する方法は?
- 27. 新しいリレーショナルrealmResultsを作成する方法は?
- 28. カメラロールで新しいフォルダを作成する方法は?
- 29. djangoで新しいモデルとフィールドを作成する方法は?
- 30. joomla1.6で新しいコンポーネントを作成する方法は?
残念ながら、ビューがスクロールされても機能しません。ビュー全体を無効にする変換にのみ適しています。 – ybungalobill