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. HTML5 Canvasでレイヤーを作成する最も良い方法は?
- 2. AppleScript/Photoshop:画像で新しいレイヤーを作成する
- 3. Qt GraphicsSceneは常に再描画します
- 4. アンドロイドアプリで画像のレイヤーを作成する方法は?
- 5. UIをカスタマイズするQTプラグインを作成する方法は?
- 6. Rails:ActiveRecordの作成方法と新しい方法の違いは?
- 7. MoinMoinに新しいページをプログラムで作成する方法は?
- 8. Version.Lucene_35で新しいLuceneドキュメントを作成する方法は?
- 9. OpenShiftで新しいユーザーを作成する方法は?
- 10. Android Studioで新しいプロジェクトを作成する方法は?
- 11. 新しいExchangeパブリックフォルダを作成する方法は?
- 12. MFC(VC++)ツリービューコントロールの新しいプロパティを作成する方法は?
- 13. Tracで新しいプロジェクトを作成する方法は?
- 14. djangoで新しいモデルとフィールドを作成する方法は?
- 15. joomla1.6で新しいコンポーネントを作成する方法は?
- 16. カメラロールで新しいフォルダを作成する方法は?
- 17. 新しいスレッドでクラスを作成する方法は?
- 18. Qt - QSqlRelationalDelegateで作成したボタンを接続する方法
- 19. はQtのコンボボックスを作成する方法
- 20. QtアプリケーションでMacスタイルのタブを作成する方法は?
- 21. Qt/C++でプロパティバインディングを作成する方法は? QMLで
- 22. CodeBlocksの新機能は、新しいファイルを作成する方法です。
- 23. ビッグコマースの新しいお支払い方法を作成する
- 24. ラリーで新しいユニットを作成してカスタマイズする方法
- 25. jung新しい位置に新しい頂点を作成する方法
- 26. Qt-Quickテストの作成方法
- 27. Qtアプリケーションのクラッシュログの作成方法
- 28. ComboBox Qt Creator - イベントの作成方法?
- 29. RealmListを含む新しいRealmObjectを作成する方法
- 30. QTで新しいドッキングバーをbuldする方法
残念ながら、ビューがスクロールされても機能しません。ビュー全体を無効にする変換にのみ適しています。 – ybungalobill