このページでは

QCanvasPath Class

QCanvasPathは、QCanvasPainter のネイティブ・パス・フォーマットです

ヘッダー #include <QCanvasPath>
CMake: find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter)
以来:Qt 6.11
ステータステクニカルプレビュー

パブリック関数

QCanvasPath()
QCanvasPath(qsizetype commandsSize, qsizetype commandsDataSize = -1)
QCanvasPath(const QCanvasPath &path)
QCanvasPath(QCanvasPath &&other)
~QCanvasPath()
void addPath(const QCanvasPath &path, const QTransform &transform = QTransform())
void addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())
void arc(float centerX, float centerY, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)
void arc(QPointF centerPoint, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)
void arcTo(float x1, float y1, float x2, float y2, float radius)
void arcTo(QPointF point1, QPointF point2, float radius)
void beginHoleSubPath()
void beginSolidSubPath()
void bezierCurveTo(float cp1X, float cp1Y, float cp2X, float cp2Y, float x, float y)
void bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)
void circle(float x, float y, float radius)
void circle(QPointF centerPoint, float radius)
void clear()
void closePath()
qsizetype commandsCapacity() const
qsizetype commandsDataCapacity() const
qsizetype commandsDataSize() const
qsizetype commandsSize() const
QPointF currentPosition() const
void ellipse(float x, float y, float radiusX, float radiusY)
void ellipse(const QRectF &rect)
bool isEmpty() const
void lineTo(QPointF point)
void lineTo(float x, float y)
void moveTo(QPointF point)
void moveTo(float x, float y)
QPointF positionAt(qsizetype index) const
void quadraticCurveTo(float cpX, float cpY, float x, float y)
void quadraticCurveTo(QPointF controlPoint, QPointF endPoint)
void rect(float x, float y, float width, float height)
void rect(const QRectF &rect)
void reserve(qsizetype commandsSize, qsizetype commandsDataSize)
void reserve(qsizetype commandsSize)
void roundRect(float x, float y, float width, float height, float radius)
void roundRect(float x, float y, float width, float height, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)
void roundRect(const QRectF &rect, float radius)
void roundRect(const QRectF &rect, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)
void setPathWinding(QCanvasPainter::PathWinding winding)
QCanvasPath sliced(qsizetype start, qsizetype count, const QTransform &transform = QTransform()) const
void squeeze()
void swap(QCanvasPath &other)
operator QVariant() const
QCanvasPath &operator=(QCanvasPath &&other)
QCanvasPath &operator=(const QCanvasPath &path)
bool operator!=(const QCanvasPath &lhs, const QCanvasPath &rhs)
bool operator==(const QCanvasPath &lhs, const QCanvasPath &rhs)

詳細な説明

ペインタ パスは、矩形、楕円、直線、曲線などのグラフィカル ブロックで構成されるオブジェクトです。QCanvasPath API は、QCanvasPainter パス ペイントにマッチし、直接ペイントするか、パスにペイントするかのコードを簡単に調整できます。QCanvasPath を使用する主な理由は、(静的な)パスの再作成を回避し、パス GPU バッファをキャッシュできるようにすることです。

QPainterPath と比較して、QCanvasPath はレンダリングに最適化されており、パスの比較や調整のための機能は少なくなっています。特に

  • 2 つのパス間の交差や減算を行うメソッドはありません。
  • パ ス を変換す る メ ソ ッ ド はあ り ません。
  • テ キ ス ト を追加す る メ ソ ッ ド はあ り ません。
  • 塗 り の規則はつねにWindingFill (非ゼ ロ ) であ り 、OddEvenFill には対応 し てい ません。

機能の観点か ら言えば、 QCanvasPath は HTML CanvasPath2D に も っ と も 近 く 、 い く つかの追加があ り 、 API がQCanvasPainter にマ ッ チ し てい ます。

パスグループとキャッシュ

QCanvasPath を使用してパスをペイントすると、エンジンはパスのジオメトリ(頂点)をキャッシュできます。これにより、静的パスのパフォーマンスが向上しますが、GPU メモリ消費量が増加する可能性があります。

QCanvasPath をパラメータとして受け取るfill() またはstroke() を使用してパスをペイントする場合、2 番目のパラメータとしてpathGroup を設定することが可能です。これはパスがキャッシュされる GPU バッファを定義します。デフォルトでは、pathGroup0 で、最初のバッファが使用されることを意味します。pathGroup-1 に設定すると、パスはそれ自身のバッファを割り当てず、beginPath() の後にコマンドと fill/stroke を使用するダイレクトペインティングと同じダイナミックバッファが使用されます。

パスをパスグループに整理することで、レンダリング性能と GPU メモリ使用量を効率的に最適化できます。バッファを最適に使用するために、同じグループに属し、同時に変更されることが多いパスは、同じグループにする必要があります。

パスが変更されると、そのジオメトリ(頂点バッファ)は自動的に更新され ます。パスグループのジオメトリ更新を引き起こすものには、次のようなものがあります:

状態変換 (QCanvasPainter::transform(),QCanvasPainter::rotate() など) を変更してもパスは無効にならないので、キャッシュされたパスの移動/拡大縮小/回転は非常に効率的です。

パスをペイントする必要がなくなったり、アプリケーションが GPU メモリを解放する必要がある場合、QCanvasPainter::removePathGroup() を呼び出すことでキャッシュを解放できます。キャッシュされたパスはペインターのデストラクタで自動的に解放されるため、通常は必要ありません。

QCanvasPainter::addPath() およびQCanvasPainter::removePathGroup()も参照してください

メンバ関数ドキュメント

QCanvasPath::QCanvasPath()

空のパスを構築する。

[explicit] QCanvasPath::QCanvasPath(qsizetype commandsSize, qsizetype commandsDataSize = -1)

空のパスを構築し、commandsSize のコマンド量と、オプションでcommandsDataSize のデータ量のための領域を確保する。commandsDataSize パラメータが与えられない場合、2 * commandsSize データ量分のスペースが自動的に確保されます。これは、パスコマンドが直線 (moveTo(),lineTo(),rect()) の場合に最適な量です。

正しいスペースを確保することは、パス作成とメモリ使用の最適化です。パスにコマンドを追加する際に十分なスペースが自動的に確保されるため、必須ではありません。

reserve()も参照のこと

QCanvasPath::QCanvasPath(const QCanvasPath &path)

与えられたpath のコピーであるパスを構築する。

QCanvasPath::QCanvasPath(QCanvasPath &&other)

移動-other から新しい QCanvasPath を構築します。

[noexcept] QCanvasPath::~QCanvasPath()

パスを破壊する。

void QCanvasPath::addPath(const QCanvasPath &path, const QTransform &transform = QTransform())

path transform を用いてパス点を変更することもできます。 が与え ら れない と き (ま たはそれが同一行列であ る と き )、 こ の操作はパスデー タ を再利用す る ので非常に高速です。transform

void QCanvasPath::addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())

start のコマンドから開始し、count のコマンドの量を含めて、path を現在のパスに追加する。オプションで、transform を使ってパスポイントを変更する。startcount の範囲がチェックされ、コマンドがQCanvasPath::commandsSize() より多くアクセスされないようにする。パスが現在のパス位置から続いてはならない場合、最初にpath.positionAt(start - 1) を使用してmoveTo() を呼び出す。

void QCanvasPath::arc(float centerX, float centerY, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)

QPointF(centerX,centerY) を中心とし、与えられたradius を持つ、a0 ラジアンの角度で始まりa1 ラジアンで終わる円弧を作成します。弧は、与えられたdirection にまたがる。connectionNotConnected のとき、前のパスは閉じられ、新しいサブパスが開始される。

void QCanvasPath::arc(QPointF centerPoint, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)

指定されたradius で、centerPoint を中心とし、a0 ラジアンの角度で始まり、a1 ラジアンで終わる円弧を作成します。弧は、与えられたdirection にまたがる。connectionNotConnected のとき、前のパスは閉じられ、新しいサブパスが開始される。

これはオーバーロードされた関数である。

void QCanvasPath::arcTo(float x1, float y1, float x2, float y2, float radius)

QPointF(x1,y1) と点QPointF(x2,y2) を使って、与えられたradius と弧を作る。

void QCanvasPath::arcTo(QPointF point1, QPointF point2, float radius)

与えられたradius を持つ点point1point2 を使って円弧を作成します。

これはオーバーロードされた関数です。

void QCanvasPath::beginHoleSubPath()

ホールサブパスを開始する。これはsetPathWinding(QCanvasPainter::PathWinding::ClockWise) と同じ。)

beginSolidSubPath()も参照のこと

void QCanvasPath::beginSolidSubPath()

ソリッドサブパスを開始する。これはsetPathWinding(QCanvasPainter::PathWinding::CounterClockWise) と同じである。)

beginHoleSubPath()も参照

void QCanvasPath::bezierCurveTo(float cp1X, float cp1Y, float cp2X, float cp2Y, float x, float y)

cp1X,cp1Y,cp2X,cp2Y で指定された制御点を用いて、現在位置とxy で指定された終点との間に三次ベジェ曲線を追加する。

曲線が追加された後、現在位置は曲線の終点になるように更新される。

void QCanvasPath::bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)

controlPoint1controlPoint2 で指定された制御点を用いて、現在位置と与えられたendPoint の間に三次ベジェ曲線を追加する。

曲線が追加された後、現在位置は曲線の終点になるように更新される。

これはオーバーロードされた関数です。

void QCanvasPath::circle(float x, float y, float radius)

QPointF(x,y) を中心とし、与えられたradius を中心とする円をパスに追加する。

void QCanvasPath::circle(QPointF centerPoint, float radius)

centerPoint を中心とし、与えられたradius を持つ円をパスに追加します。

これはオーバーロードされた関数です。

void QCanvasPath::clear()

パスコマンドとデータをクリアする。

パス・コマンドが変更されたときにこれをコールして、パスを再作成する。これはメモリ使用量には影響しないので、その場合はreserve() およびsqueeze() を使用する。

reserve() およびsqueeze()も参照

void QCanvasPath::closePath()

サブパスの始点に線を引いて現在のサブパスを閉じ、自動的に新しいパスを開始する。

qsizetype QCanvasPath::commandsCapacity() const

パス内のコマンドの容量を返す。

commandsDataCapacity() およびreserve()も参照

qsizetype QCanvasPath::commandsDataCapacity() const

パス内のコマンドデータの容量を返す。

commandsCapacity() およびreserve()も参照

qsizetype QCanvasPath::commandsDataSize() const

パスに含まれるコマンドデータの量を返す。

コマンドデータとは、基本的にコマンドが必要とするポイントを意味する。

注意: パス要素の中には、複数のデータポイントを必要とするものがあります。例えば、closePath0 を、moveTolineTo2 を、bezierCurveTo は 6 を、roundRect34 のデータポイントを必要とします。

qsizetype QCanvasPath::commandsSize() const

パス内のコマンドの量を返します。

注意: パス要素の中には複数のコマンドを必要とするものがあります。例えば、moveTolineTo1 コマンドを必要とし、bezierCurveTo6 コマンドを必要とし、roundRect10 コマンドを必要とします。

QPointF QCanvasPath::currentPosition() const

パスの現在位置を返す。これは、前のパスコマンド (moveTo,lineTo,bezierCurveTo など) が終了した位置を意味する。パスが空の場合は、(0.0, 0.0) を返す。

void QCanvasPath::ellipse(float x, float y, float radiusX, float radiusY)

(x,y) を中心とし、半径がradiusX,radiusY で定義される楕円を作成し、それを閉じたサブパスとしてパスに追加する。

void QCanvasPath::ellipse(const QRectF &rect)

矩形rect 内に楕円を作成し、それを閉じたサブパスとしてパスに追加します。

これはオーバーロードされた関数です。

bool QCanvasPath::isEmpty() const

パスが空の場合に true を返す。

clearも参照

void QCanvasPath::lineTo(QPointF point)

現在の位置から与えられたpoint まで直線を追加する。直線が引かれた後、現在位置は直線の終点に更新される。

これはオーバーロードされた関数です。

void QCanvasPath::lineTo(float x, float y)

現在位置から点(x,y )まで線を引く。

これはオーバーロードされた関数です。

void QCanvasPath::moveTo(QPointF point)

point暗黙的に新しいサブパスを開始し、前のサブパスを閉じる。

これはオーバーロードされた関数である。

void QCanvasPath::moveTo(float x, float y)

現在の位置を (x,y) に移動し、新しいサブパスを開始し、暗黙のうちに前のパスを閉じる。

これはオーバーロードされた関数です。

QPointF QCanvasPath::positionAt(qsizetype index) const

index におけるパスの位置を返す。これは、パスコマンド (moveTo,lineTo,bezierCurveTo など) がindex にある位置を意味する。インデックスは0commandsSize() - 1 の間である必要があります。パスが空の場合、(0.0, 0.0)を返します。

void QCanvasPath::quadraticCurveTo(float cpX, float cpY, float x, float y)

カ レ ン ト 点 と 、 (cpX,cpY) で指定 さ れた制御点を持つ終点 (x,y) との間に、 二次ベジェ曲線を追加 し ます。

void QCanvasPath::quadraticCurveTo(QPointF controlPoint, QPointF endPoint)

現在の位置と与えられたendPoint の間に、controlPoint で指定された制御点を持つ二次ベジェ曲線を追加します。

これはオーバーロードされた関数です。

void QCanvasPath::rect(float x, float y, float width, float height)

QPointF(x,y) の位置に、 与えられたwidthheight を持つ矩形を作成します。

void QCanvasPath::rect(const QRectF &rect)

で指定された矩形を作成する。rect

これはオーバーロードされた関数である。

void QCanvasPath::reserve(qsizetype commandsSize, qsizetype commandsDataSize)

QCanvasPath の内部メモリに所定の容量を確保する。

少なくともcommandsSize のコマンドとcommandsDataSize のデータポイントのためのメモリを確保しようとする。パス要素の中には複数のコマンドを必要とするものがあります。commandsSize() およびcommandsDataSize() を参照してください。

正しい領域を確保することは、パスの作成とメモリ使用の最適化です。パスにコマンドを追加する際に十分なスペースが自動的に確保されるため、必須ではありません。

squeeze()、commandsCapacity()、commandsDataCapacity()も参照

void QCanvasPath::reserve(qsizetype commandsSize)

QCanvasPath の内部メモリーに指定された量のスペースを確保する。

少なくともcommandsSize コマンド用のメモリを確保しようとする。パス要素の中には複数のコマンドを必要とするものがある。commandsSize() とcommandsDataSize() を参照。

スペースは自動的に2 * commandsSize のデータ量分確保され、パス・コマンドが直線 (moveTo(),lineTo(),rect()) の場合に最適な量となる。

正しいスペースを確保することは、パス作成とメモリ使用の最適化です。パスにコマンドを追加する際に十分なスペースが自動的に確保されるため、必須ではありません。

これはオーバーロードされた関数です。

squeeze()、commandsCapacity()、commandsDataCapacity()も参照

void QCanvasPath::roundRect(float x, float y, float width, float height, float radius)

与えられた矩形x,y,width,height を、 角を丸めた形でパスに追加します。角は、 与えられたradius の 4 分の 1 円です。

void QCanvasPath::roundRect(float x, float y, float width, float height, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)

角が丸 く な っ た矩形x,y,width,height をパスに追加 し ます。角はそれぞれ半径radiusTopLeft,radiusTopRight radiusBottomRight ,radiusBottomLeft の 1/4 円です。

void QCanvasPath::roundRect(const QRectF &rect, float radius)

角が丸 く な っ た、 与えられた矩形rect をパスに追加 し ます。角は、与えられたradius の 4 分の 1 円です。

これはオーバーロードされた関数です。

void QCanvasPath::roundRect(const QRectF &rect, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)

角が丸 く な っ た矩形rect をパスに追加。角はそれぞれ半径radiusTopLeft,radiusTopRight radiusBottomRight ,radiusBottomLeft の四分円です。

これはオーバーロードされた関数です。

void QCanvasPath::setPathWinding(QCanvasPainter::PathWinding winding)

現在のサブパスwindingQCanvasPainter::CounterClockWise (デフォルト) またはQCanvasPainter::ClockWise のいずれかに設定する。CounterClockWise は実線のサブパスを描画し、ClockWise は穴を描画する。

注: これはlineTo,moveTo などと同様のコマンドであるため、巻線の設定は、変更した巻線を適用する予定の他のコマンドの前に行う必要がある。

QCanvasPath QCanvasPath::sliced(qsizetype start, qsizetype count, const QTransform &transform = QTransform()) const

このパスのコマンドを含む新しいパスを返す。start のコマンドから始まり、count の量のコマンドを含む。オプションで、transform を使ってパスのポイントを変更することもできる。

startcount の範囲がチェックされ、コマンドがcommandsSize ()より多くアクセスされないようにする。start のコマンドがMoveTo でない場合、最初のコマンドはMoveTo に置き換えられ、このスライスは個別のパスになります。

void QCanvasPath::squeeze()

パス・コマンドとデータの格納に不要なメモリを解放する。これは、reserve ()を呼び出した後のメモリ使用量を減らすために使用できる。

通常は使用する必要はありませんが、多くの要素 (lineTo,bezierCurveTo など) を予約または追加したためにパスのサイズが大きくなり、将来的にサイズが小さくなることが予想される場合に、最初にreserve() を呼び出し、次にsqueeze() を呼び出すことで、メモリを解放することができます。

reserve()も参照のこと

[noexcept] void QCanvasPath::swap(QCanvasPath &other)

このパスをother と入れ替える。この操作は非常に高速で、失敗することはない。

QCanvasPath::operator QVariant() const

パスをQVariant として返します。

[noexcept] QCanvasPath &QCanvasPath::operator=(QCanvasPath &&other)

Move-other をこのQCanvasPath インスタンスに割り当てる。

QCanvasPath &QCanvasPath::operator=(const QCanvasPath &path)

与えられたpath をこのパスに割り当て、このパスへの参照を返します。

関連する非会員

[noexcept] bool operator!=(const QCanvasPath &lhs, const QCanvasPath &rhs)

パスlhsrhs と異なる場合はtrue を返し、そうでない場合はfalse を返す。

operator==()も参照

[noexcept] bool operator==(const QCanvasPath &lhs, const QCanvasPath &rhs)

パスlhsrhs と等しければtrue を返し、そうでなければfalse を返す。

operator!=()も参照のこと

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