このページでは

Shape QML Type

パスを描画します。詳細...

Import Statement: import QtQuick.Shapes 1.12
Inherits:

Item

Inherited By:

EllipseShape and MaskShape

プロパティ

詳細な説明

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 と同様に、Shape でも視覚的または非視覚的なオブジェクトを子要素として宣言できます。ShapePath オブジェクトは特別に扱われます。これにより、Rectangle やImage といった視覚的要素や、Timer といった非視覚的オブジェクトを、Shape の子要素として直接追加できるため便利です。

以下のリストは、利用可能な 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 アイテムを使用するよりも、1 つの Shape アイテムに複数のShapePath 要素を含める方法を優先してください。

関連項目: Qt Quick の例 - Shapes、天気予報の例、Path 、PathMove 、PathLine 、PathQuad 、PathCubic 、PathArc 、およびPathSvg 。

プロパティのドキュメント

asynchronous : bool

rendererType がShape.GeometryRenderer またはShape.CurveRenderer に設定されている場合、シェイプのポリッシングフェーズ中に、入力パスに対してCPU上で一定量の事前処理が行われます。これは処理負荷が高くなる可能性があります。この処理を別のワーカースレッドにオフロードするには、このプロパティをtrue に設定してください。

これを有効にすると、Shape を表示する際に、コンテンツが利用可能になるのを待たなくなります。その代わりに、GUI/メインスレッドはブロックされず、すべての非同期処理が完了した時点で初めて、パスのレンダリング結果が表示されます。

デフォルト値は `false` です。

boundingRect : rect [read-only, since 6.6]

シェイプ内のすべてのサブパスの結合されたバウンディング矩形を含みます。

このプロパティは Qt 6.6 で導入されました。

containsMode : enumeration [since QtQuick.Shapes 1.11]

このプロパティは、Shape の `contains()` の定義を決定します。Qt Quick の入力ハンドラを追加し、マウスやタッチポイントが Shape の範囲内に完全に収まっている場合にのみ反応させたい場合に役立ちます。

定数説明
Shape.BoundingRectContainsQQuickItem::contains() のデフォルトの実装では、指定された点が矩形のバウンディングボックス内にあるかどうかのみをチェックします。これは最も効率的な実装であるため、デフォルトとして採用されています。
Shape.FillContainsこのシェイプを構成する任意のShapePath の内部(fillで描画した場合に塗りつぶされる部分)に、指定された点が含まれているかどうかを確認します。追加するShapePathが複雑で数が多いほど、このチェックの効率は低下し、アプリケーションでのイベント配信が遅くなる可能性があります。そのため、使用には注意が必要です。

FillContains のチェックを高速化する1つの方法は、できるだけ少ない点数で近似のアウトラインを生成し、それを上部に透明なShapeとして配置し、そこにPointer Handlerを追加することです。これにより、イベント配信時の包含チェックの負荷を軽減できます。

このプロパティは、QtQuick.Shapes 1.11で導入されました。

data : list<Object> [default]

このプロパティには、Shape の内容を定義する `ShapePath ` オブジェクトが格納されます。また、Shape は Item と同様に、視覚的または非視覚的なオブジェクトを子として追加できるため、このプロパティにはその他の種類のオブジェクトも格納される可能性があります。

fillMode : enumeration [since QtQuick.Shapes 6.7]

このプロパティを設定して、パスとアイテムのサイズが異なる場合の挙動を定義します。

定数説明
Shape.NoResizeアイテムのサイズに関係なく、シェイプは本来のサイズでレンダリングされます。これがデフォルトの設定です
Shape.Stretchシェイプはアイテムに収まるように拡大縮小され、必要に応じてアスペクト比が変更されます。カーブレンダラーを使用する場合、不均一な拡大縮小によりアンチエイリアシングの品質が低下する可能性があることに注意してください。
Shape.PreserveAspectFitシェイプは、アイテム内に収まるように均一に拡大縮小されます。
Shape.PreserveAspectCrop図形は、アイテムを完全に埋めるように均一にスケーリングされ、必要に応じてアイテムの外側に拡張されます。なお、clip がtrueの場合にのみ、実際にコンテンツがトリミングされることに注意してください

このプロパティは、QtQuick.Shapes 6.7 で導入されました。

horizontalAlignment : enumeration [since 6.7]

verticalAlignment : enumeration [since 6.7]

アイテム内の図形の水平および垂直方向の位置合わせを設定します。デフォルトでは、図形は左上隅の(0,0) に合わせて配置されます。

horizontalAlignment の有効な値は、Shape.AlignLeft 、Shape.AlignRight 、Shape.AlignHCenter です。verticalAlignment の有効な値は、Shape.AlignTop 、Shape.AlignBottom 、Shape.AlignVCenter です。

これらのプロパティは Qt 6.7 で導入されました。

preferredRendererType : enumeration [since 6.6]

シェイプのレンダリングに使用する特定のバックエンドを指定します。指定可能な値は、rendererType と同じです。デフォルトはShape.UnknownRenderer で、これは特に指定がないことを意味します。

要求されたレンダラータイプが現在のQt Quick バックエンドでサポートされていない場合、そのバックエンドのデフォルトのレンダラーが代わりに使用されます。これは、バックエンドの初期化時にrendererType に反映されます。

Shape.SoftwareRenderer 現在、software バックエンドでシーングラフを実行しない限り、このレンダラーを選択することはできません。 バックエンドで実行された場合、preferredRendererType の設定にかかわらず、このレンダラーが選択されます。

これに伴う影響の詳細については、rendererType を参照してください。

このプロパティは Qt 6.6 で導入されました。

rendererType : enumeration [read-only]

このプロパティは、どのパスレンダリングバックエンドが有効であるかを決定します。

定数説明
Shape.UnknownRendererレンダラーが不明です。
Shape.GeometryRendererGPU レンダリングのための、汎用的でドライバに依存しないソリューションです。QPainter の OpenGL 2 ペイントエンジンと同じ、CPU ベースの三角形分割アプローチを使用します。これは、RHI ベースのQt Quick シーングラフバックエンドが使用されている場合のデフォルト設定です。
Shape.SoftwareRendererラスターペイントエンジンを使用した、純粋なQPainter による描画。これは、Qt Quick シーングラフが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 [read-only]

このプロパティは、Shape の状態を決定するものであり、Shape.asynchronous が `true` に設定されている場合に意味を持ちます。

定数説明
Shape.Nullまだ初期化されていません。
Shape.ReadyShape の処理が完了しました。
Shape.Processingパスの処理が行われています。

vendorExtensionsEnabled : bool

このプロパティは、非標準の OpenGL 拡張機能の使用を制御します。

デフォルト値は `false` です。

Qt 6.0 の時点では、ベンダー固有のレンダリングパスは実装されていません。

© 2026 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.