Shape QML Type
パスを描画します。詳細...
Import Statement: | import QtQuick.Shapes 1.8 |
Inherits: | |
Inherited By: |
プロパティ
- asynchronous : bool
- boundingRect : rect
(since 6.6)
- containsMode : enumeration
(since QtQuick.Shapes 1.11)
- data : list<Object>
- fillMode : enumeration
(since QtQuick.Shapes 6.7)
- horizontalAlignment : enumeration
(since 6.7)
- preferredRendererType : enumeration
(since 6.6)
- rendererType : enumeration
- status : enumeration
- vendorExtensionsEnabled : bool
- verticalAlignment : enumeration
(since 6.7)
詳細説明
QPainterPath からジオメトリを三角形分割してパスをレンダリングします。
このアプローチは、QQuickPaintedItem や 2D Canvas を介して形状をレンダリングするのとは異なります。なぜなら、パスはソフトウェアでラスタライズされることがないからです。そのためShapeは、テクスチャのアップロードやフレームバッファのブライトによるパフォーマンスの低下を避け、画面の広い範囲に広がる形状を作成するのに適しています。さらに、宣言型APIでは、開始位置や終了位置、制御点などのパス要素のプロパティを操作したり、バインドしたり、アニメートしたりすることもできます。
パス要素を指定する型は、PathView と Shape で共有されています。しかし、すべての Shape 実装がすべてのパス要素タイプに対応しているわけではなく、PathView では意味をなさないものもあります。Shapeが現在サポートしているサブセットは以下の通りです:PathMove PathLine,PathQuad,PathCubic,PathArc,PathText,PathSvg です。
対応するパス要素の詳細についてはPath を参照してください。
Shape { width: 200 height: 150 anchors.centerIn: parent ShapePath { strokeWidth: 4 strokeColor: "red" fillGradient: LinearGradient { x1: 20; y1: 20 x2: 180; y2: 130 GradientStop { position: 0; color: "blue" } GradientStop { position: 0.2; color: "green" } GradientStop { position: 0.4; color: "red" } GradientStop { position: 0.6; color: "yellow" } GradientStop { position: 1; color: "cyan" } } strokeStyle: ShapePath.DashLine dashPattern: [ 1, 4 ] startX: 20; startY: 20 PathLine { x: 180; y: 130 } PathLine { x: 20; y: 130 } PathLine { x: 20; y: 20 } } }
Item ShapePath オブジェクトは特別に扱われます。これは、 や のような視覚的アイテムや、 のような非視覚的オブジェクトを Shape の子として直接追加できるので便利です。Rectangle Image Timer
利用可能な Shape レンダリングアプローチを以下にまとめます:
- Qt Quick がデフォルトのハードウェアアクセラレーションバックエンド(RHI)で実行されている場合、汎用シェイプレンダラが使用される。これはシェイプを三角形に変換し、レンダラーに渡します。
software
バックエンドは完全にサポートされています。この場合、パスはQPainter::strokePath() とQPainter::fillPath() を介してレンダリングされます。- OpenVG バックエンドは現在サポートされていません。
Shapeを使用する場合、潜在的なパフォーマンスへの影響に注意することが重要です:
- 一般的な三角測量ベースの Shape 実装でアプリケーションを実行する場合、ジオメトリの生成はすべて CPU で行われます。これはコストがかかる可能性があります。パス要素のセットを変更したり、これらの要素のプロパティを変更したり、Shape自体の特定のプロパティを変更したりすると、変更のたびに影響を受けるパスの再三角形化が必要になります。したがって、このようなプロパティにアニメーションを適用すると、性能の低いシステムではパフォーマンスに影響が出る可能性があります。
- しかし、Shape APIのデータ駆動型で宣言的な性質は、多くの場合、基礎となるCPUやGPUリソースのキャッシュ可能性を向上させます。ShapePath のプロパティを変更しても、影響を受けるShapePath の再処理が行われるだけで、Shape の他の部分は変更されません。そのため、頻繁に変更されるプロパティは、命令型ペインティング・アプローチ(例えば、QPainter )に比べて、システム全体の負荷を低く抑えることができます。
- 同時に、シーン内の Shape 要素の数にも注意が必要です。このようなShapeアイテムがシーングラフで表現される方法は、通常のジオメトリベースのアイテムとは異なり、OpenGLのステート変更に関して一定のコストが発生します。
- 一般的なルールとして、シーンは、絶対に必要でない場合は、別々のShapeアイテムの使用を避けるべきです。複数の Shape アイテムよりも、複数のShapePath エレメントを持つ 1 つの Shape アイテムを使用することをお勧めします。
Qt Quick Examples - Shapes,Weather Forecast Example,Path,PathMove,PathLine,PathQuad,PathCubic,PathArc, andPathSvgも参照して ください。
プロパティ・ドキュメンテーション
horizontalAlignment : enumeration |
verticalAlignment : enumeration |
アイテム内のシェイプの水平方向と垂直方向のアライメントを設定します。デフォルトでは、シェイプは(0,0)
の左上に配置されます。
horizontalAlignment
の有効な値はShape.AlignLeft
、Shape.AlignRight
、Shape.AlignHCenter
です。verticalAlignment
の有効な値はShape.AlignTop
,Shape.AlignBottom
,Shape.AlignVCenter
です。
この QML プロパティは Qt 6.7 で導入されました。
asynchronous : bool |
rendererType がShape.GeometryRenderer
またはShape.CurveRenderer
の場合、Shape の研磨段階で、CPU 上で入力パスの前処理が一定量行われます。これはコストがかかる可能性があります。この作業を別のワーカースレッドにオフロードするには、このプロパティをtrue
に設定します。
このプロパティを有効にすると、シェイプを可視化しても、コンテンツが利用可能になるのを待ちません。その代わり、GUI/メイン スレッドはブロックされず、パス レンダリングの結果は、すべての非同期作業が終了したときにのみ表示されます。
デフォルト値はfalse
です。
boundingRect : rect |
このプロパティは、Qt 6 で導入されました。
このプロパティは Qt 6.6 で導入されました。
containsMode : enumeration |
このプロパティは、Shape のcontains() の定義を決定します。このプロパティは、Qt Quick 入力ハンドラを追加し、マウスまたはタッチポイントが完全にシェイプ内にある場合にのみ反応させたい場合に便利です。
定数 | 説明 |
---|---|
Shape.BoundingRectContains | QQuickItem::contains() のデフォルトの実装は、指定された点が矩形のバウンディング・ボックスの内側にあるかどうかだけをチェックします。これは最も効率的な実装であり、これがデフォルトの理由です。 |
Shape.FillContains | この Shape を構成するShapePath の内部(塗りつぶしでレンダリングする場合、塗りつぶされる部分)に、指定された点が含まれているかどうかをチェックします。ShapePathが複雑で数が多ければ多いほど、このチェックの効率が悪くなり、アプリケーションのイベント配信が遅くなる可能性があります。そのため、使用には注意が必要です。 |
FillContains
のチェックを高速化する方法の 1 つは、できるだけ少ないポイントでおおよそのアウトラインを生成し、それを上に透明な Shape で配置し、そこにポインタ ハンドラを追加することです。
このプロパティは、QtQuick.Shapes 1.11で導入されました。
data : list<Object> |
このプロパティは、Shapeの内容を定義するShapePath オブジェクトを保持します。ShapeはItemと同様に、視覚的または非視覚的なオブジェクトを子として追加することができるため、他のタイプのオブジェクトを含めることもできます。
fillMode : enumeration |
このプロパティを設定することで、パスのサイズがアイテムと異なる場合の動作を定義することができます。
定数 | 説明 |
---|---|
Shape.NoResize | の場合、Shape は、アイテムのサイズとは無関係に、本来のサイズでレンダリングされます。これはデフォルトです。 |
Shape.Stretch | アイテムのサイズに合うようにスケーリングされ、必要に応じて縦横比が変更されます。カーブレンダラを使用する場合、一様でないスケーリングはアンチエイリアスの品質を低下させる可能性があることに注意してください。 |
Shape.PreserveAspectFit | アイテムの内側にフィットするように一様にスケーリングされます。 |
Shape.PreserveAspectCrop | シェイプは、アイテムを完全に満たすように一様にスケーリングされ、必要に応じてアイテムの外側に拡張されます。実際にコンテンツを切り抜くのは、clipが true の場合のみであることに注意してください。 |
このプロパティは QtQuick.Shapes 6.7 で導入されました。
preferredRendererType : enumeration |
シェイプのレンダリングに使用する特定のバックエンドを要求します。指定できる値はrendererType と同じです。デフォルトはShape.UnknownRenderer
で、特に指定はありません。
要求されたレンダラータイプが現在のQt Quick バックエンドでサポートされていない場合、そのバックエンドのデフォルトレンダラーが代わりに使用されます。これはバックエンドの初期化時にrendererType に反映されます。
Shape.SoftwareRenderer
現在のところ、 バックエンドでシーングラフを実行しないと選択できません。この場合、 に関係なく選択されます。software
preferredRendererType
この場合、rendererType に関係なく選択されます。その意味については を参照してください。
このプロパティは Qt 6.6 で導入されました。
rendererType : enumeration |
このプロパティは、どのパスレンダリングバックエンドがアクティブであるかを決定します。
定数 | 説明 |
---|---|
Shape.UnknownRenderer | レンダラーが不明です。 |
Shape.GeometryRenderer | GPU レンダリングのための、ドライバに依存しない汎用ソリューションです。QPainter の OpenGL 2 ペイントエンジンと同じ CPU ベースの三角測量アプローチを使用します。これは、RHI ベースのQt Quick scenegraph バックエンドが使用されているときのデフォルトです。 |
Shape.SoftwareRenderer | ラスターペイントエンジンを使用した、純粋なQPainter 描画。これは、Qt Quick scenegraph がsoftware バックエンドで動作しているときのデフォルトであり、唯一のオプションです。 |
Shape.CurveRenderer | GPU ベースのレンダラーで、あらゆるスケールで曲率を保持することを目的とします。Shape.GeometryRenderer とは対照的に、曲線は短い直線で近似されません。その代わり、曲線は特殊なフラグメントシェーダーを使用してレンダリングされます。これにより、視覚的な品質が向上し、ズーム時のリ テッセレーション・パフォーマンスのヒットを回避できます。また、Shape.CurveRenderer は、マルチサンプリングやスーパーサンプリングのパフォーマンスコストなしに、ネイティブで高品質なアンチエイリアシングを提供します。 |
デフォルトでは、Qt Quick のシーングラフがsoftware
バックエンドで実行されていない限り、Shape.GeometryRenderer
が選択されます。その場合、Shape.SoftwareRenderer
が使用されます。Shape.CurveRenderer
は、preferredRendererType プロパティを使用して要求できます。
注意: Shape.CurveRenderer
は3次曲線を2次曲線で近似するため、シェイプの数学的に正しいビジュアライゼーションから若干乖離する可能性があります。さらに、シェイプがQt Quick 3Dシーンにレンダリングされ、RHIのOpenGLバックエンドがアクティブな場合、OpenGLのGL_OES_standard_derivatives
拡張が必要です(これはOpenGL ES 3以降でデフォルトで利用可能ですが、OpenGL ES 2ではオプションです)。
status : enumeration |
このプロパティはShapeの状態を決定し、Shape.asynchronousがtrue
に設定されている場合に関連します。
定数 | 説明 |
---|---|
Shape.Null | 未初期化。 |
Shape.Ready | Shape は処理を終了しました。 |
Shape.Processing | パスは処理中です。 |
vendorExtensionsEnabled : bool |
このプロパティは、非標準の OpenGL 拡張の使用を制御します。
デフォルト値はfalse
です。
Qt 6.0 では、ベンダー固有のレンダリングパスは実装されていません。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.