Shape QML Type

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

Import Statement: import QtQuick.Shapes 1.8
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 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アイテムよりも、1つのShapeアイテムに複数のShapePath

Qt Quick Examples - Shapes,Weather Forecast Example,Path,PathMove,PathLine,PathQuad,PathCubic,PathArc,PathSvgも参照してください

プロパティの説明

horizontalAlignment : enumeration [since 6.7]

verticalAlignment : enumeration [since 6.7]

アイテム内のシェイプの水平および垂直アライメントを設定します。デフォルトでは、図形は左上隅の(0,0) に整列される。

horizontalAlignment の有効な値はShape.AlignLeftShape.AlignRightShape.AlignHCenter です。verticalAlignment の有効な値はShape.AlignTop,Shape.AlignBottom,Shape.AlignVCenter です。

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


asynchronous : bool

rendererTypeShape.GeometryRenderer またはShape.CurveRenderer の場合、Shape の研磨段階で、CPU 上で入力パスの前処理が一定量行われます。これはコストがかかる可能性があります。この作業を別のワーカースレッドにオフロードするには、このプロパティをtrue に設定します。

このプロパティを有効にすると、シェイプを可視化しても、コンテンツが利用可能になるのを待ちません。その代わり、GUI/メイン スレッドはブロックされず、パス レンダリングの結果は、すべての非同期作業が終了したときにのみ表示されます。

デフォルト値はfalse です。


boundingRect : rect [read-only, since 6.6]

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

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


containsMode : enumeration [since QtQuick.Shapes 1.11]

このプロパティは、Shape のcontains() の定義を決定します。Qt Quick Input Handlers を追加し、マウスまたはタッチポイントが完全にシェイプ内にある場合にのみ反応させたい場合に便利です。

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

FillContains のチェックを高速化する 1 つの方法は、できるだけ少ない点数でおおよそのアウトラインを生成し、それを上に透明な Shape で配置し、そこにポインタ ハンドラを追加することです。

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


data : list<Object> [default]

このプロパティは、Shapeの内容を定義するShapePath オブジェクトを保持します。ShapeはItemと同様に、視覚的または非視覚的なオブジェクトを子として追加することができるため、他のタイプのオブジェクトを含めることもできます。


fillMode : enumeration [since QtQuick.Shapes 6.7]

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

定数説明
Shape.NoResizeの場合、Shape は、アイテムのサイズとは無関係に、本来のサイズでレンダリングされます。これはデフォルトです。
Shape.Stretchアイテムのサイズに合うようにスケーリングされ、必要に応じて縦横比が変更されます。カーブレンダラを使用する場合、一様でないスケーリングはアンチエイリアスの品質を低下させる可能性があることに注意してください。
Shape.PreserveAspectFitアイテムの内側にフィットするように一様にスケーリングされます。
Shape.PreserveAspectCropシェイプは、アイテムを完全に満たすように一様にスケーリングされ、必要に応じてアイテムの外側に拡張されます。実際にコンテンツを切り抜くのは、clipが true の場合のみであることに注意してください。

このプロパティは QtQuick.Shapes 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 scenegraph バックエンドが使用されているときのデフォルトです。
Shape.SoftwareRendererラスターペイントエンジンを使用した、純粋なQPainter 描画。これは、Qt Quick scenegraph がsoftware バックエンドで動作しているときのデフォルトであり、唯一のオプションです。
Shape.CurveRendererGPU ベースのレンダラーで、どのようなスケールでも曲率を保持することを目的としています。Shape.GeometryRenderer とは対照的に、曲線は短い直線で近似されません。その代わり、曲線は特殊なフラグメントシェーダを使ってレンダリングされます。これにより、視覚的な品質が向上し、ズーム時のリテッセレーション・パフォーマンスのヒットを避けることができます。また、Shape.CurveRenderer は、マルチサンプリングやスーパーサンプリングのパフォーマンスコストなしに、ネイティブで高品質なアンチエイリアシングを提供します。

デフォルトでは、Qt Quick scenegraph が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 では、ベンダー固有のレンダリングパスは実装されていません。


Qt 6.0 では、ベンダー固有のレンダリングパスは実装されていません 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。