このページでは

QCanvasPainter Class

QCanvasPainter クラスは、QRhi 上でハードウェアアクセラレーションによる描画を行います。詳細...

ヘッダー: #include <QCanvasPainter>
CMake: find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter)
以下より: Qt 6.11

パブリック型

enum class CompositeOperation { SourceOver, SourceAtop, DestinationOut }
(since 6.12) enum class FillRule { NonZero, EvenOdd }
enum class ImageFlag { GenerateMipmaps, RepeatX, RepeatY, Repeat, FlipY, …, Nearest }
flags ImageFlags
enum class LineCap { Butt, Round, Square }
enum class LineJoin { Round, Bevel, Miter }
enum class PathConnection { NotConnected, Connected }
enum class PathWinding { CounterClockWise, ClockWise }
enum class TextAlign { Left, Right, Center, Start, End }
enum class TextBaseline { Top, Hanging, Middle, Alphabetic, Bottom }
enum class TextDirection { LeftToRight, RightToLeft, Inherit, Auto }
enum class WrapMode { NoWrap, Wrap, WordWrap, WrapAnywhere }

パブリック関数

QCanvasPainter()
~QCanvasPainter()
qsizetype activeImageCount() const
qsizetype activeImageMemoryUsage() const
QCanvasImage addImage(const QImage &image, QCanvasPainter::ImageFlags flags = {})
QCanvasImage addImage(QRhiTexture *texture, QCanvasPainter::ImageFlags flags = {})
QCanvasImage addImage(const QCanvasOffscreenCanvas &canvas, QCanvasPainter::ImageFlags flags = {})
void addPath(const QPainterPath &path)
void addPath(const QCanvasPath &path, const QTransform &transform = QTransform())
void addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())
void arc(qreal centerX, qreal centerY, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
void arc(QPointF centerPoint, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
void arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius)
void arcTo(QPointF controlPoint1, QPointF controlPoint2, qreal radius)
void beginHoleSubPath()
void beginPath()
void beginSolidSubPath()
void bezierCurveTo(qreal cp1X, qreal cp1Y, qreal cp2X, qreal cp2Y, qreal x, qreal y)
void bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)
void circle(qreal centerX, qreal centerY, qreal radius)
void circle(QPointF centerPoint, qreal radius)
void cleanupResources()
void clearRect(qreal x, qreal y, qreal width, qreal height)
void clearRect(const QRectF &rect)
void closePath()
QCanvasOffscreenCanvas createCanvas(QSize pixelSize, int sampleCount = 1, QCanvasOffscreenCanvas::Flags flags = {})
void destroyCanvas(QCanvasOffscreenCanvas &canvas)
void drawBoxShadow(const QCanvasBoxShadow &shadow)
void drawImage(const QCanvasImage &image, qreal x, qreal y)
void drawImage(const QCanvasImage &image, const QRectF &destinationRect)
void drawImage(const QCanvasImage &image, const QRectF &sourceRect, const QRectF &destinationRect)
void drawImage(const QCanvasImage &image, qreal x, qreal y, qreal width, qreal height)
void ellipse(qreal centerX, qreal centerY, qreal radiusX, qreal radiusY)
void ellipse(const QRectF &rect)
void ellipse(QPointF centerPoint, qreal radiusX, qreal radiusY)
void fill()
(since 6.12) void fill(QCanvasPainter::FillRule fillRule)
void fill(const QCanvasPath &path, int pathGroup = -1)
(since 6.12) void fill(const QCanvasPath &path, QCanvasPainter::FillRule fillRule, int pathGroup = -1)
void fillRect(qreal x, qreal y, qreal width, qreal height)
void fillRect(const QRectF &rect)
void fillText(const QString &text, qreal x, qreal y, qreal maxWidth = 0)
void fillText(const QString &text, const QRectF &rect)
void fillText(const QString &text, QPointF point, qreal maxWidth = 0)
QTransform getTransform() const
void lineTo(qreal x, qreal y)
void lineTo(QPointF point)
void moveTo(qreal x, qreal y)
void moveTo(QPointF point)
void quadraticCurveTo(qreal cpX, qreal cpY, qreal x, qreal y)
void quadraticCurveTo(QPointF controlPoint, QPointF endPoint)
void rect(qreal x, qreal y, qreal width, qreal height)
void rect(const QRectF &rect)
void removeImage(const QCanvasImage &image)
void removePathGroup(int pathGroup)
void reset()
void resetClipping()
void resetTransform()
void restore()
void rotate(qreal angle)
void roundRect(qreal x, qreal y, qreal width, qreal height, qreal radius)
void roundRect(const QRectF &rect, qreal radius)
void roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
void roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
void save()
void scale(qreal scale)
void scale(qreal scaleX, qreal scaleY)
void setAntialias(qreal antialias)
void setClipRect(qreal x, qreal y, qreal width, qreal height)
void setClipRect(const QRectF &rect)
(since 6.12) void setFillRule(QCanvasPainter::FillRule fillRule)
void setFillStyle(QColor color)
void setFillStyle(const QCanvasBrush &brush)
void setFont(const QFont &font)
void setGlobalAlpha(qreal alpha)
void setGlobalBrightness(qreal value)
void setGlobalCompositeOperation(QCanvasPainter::CompositeOperation operation)
void setGlobalContrast(qreal value)
void setGlobalSaturation(qreal value)
void setHighQualityStroking(bool enabled)
void setLineCap(QCanvasPainter::LineCap cap)
void setLineJoin(QCanvasPainter::LineJoin join)
void setLineWidth(qreal width)
void setMiterLimit(qreal limit)
void setPathWinding(QCanvasPainter::PathWinding winding)
void setStrokeStyle(QColor color)
void setStrokeStyle(const QCanvasBrush &brush)
void setTextAlign(QCanvasPainter::TextAlign align)
void setTextAntialias(qreal antialias)
void setTextBaseline(QCanvasPainter::TextBaseline baseline)
void setTextDirection(QCanvasPainter::TextDirection direction)
void setTextLineHeight(qreal height)
void setTextWrapMode(QCanvasPainter::WrapMode wrapMode)
void setTransform(const QTransform &transform)
void setWindingEnforce(bool enabled)
void skew(qreal angleX, qreal angleY = 0.0)
void stroke()
void stroke(const QCanvasPath &path, int pathGroup = -1)
void strokeRect(qreal x, qreal y, qreal width, qreal height)
void strokeRect(const QRectF &rect)
QRectF textBoundingBox(const QString &text, qreal x, qreal y, qreal maxWidth = 0) const
QRectF textBoundingBox(const QString &text, const QRectF &rect) const
QRectF textBoundingBox(const QString &text, QPointF point, qreal maxWidth = 0) const
void transform(const QTransform &transform)
void translate(qreal x, qreal y)
void translate(QPointF point)

詳細な説明

Qt Canvas Painter (QCanvasPainter) は、ハードウェアアクセラレーション(GPU)による描画に最適化された描画 API を提供します。この API は、HTML Canvas 2D コンテキスト仕様に厳密に従い、Qt C++ に移植されたものです。また、QPainter の影響も受けていますが、よりコンパクトな API となっています。

以下は、QCanvasPainter を使用して丸いボタンを作成する簡単な例です。

「CLICK!」と書かれた、柔らかなドロップシャドウがかかった黄色い丸いボタン
QRectF rect(40, 70, 120, 60);
QRectF shadowRect = rect.translated(2, 4);
// Paint shadow
QCanvasBoxShadow shadow(shadowRect);
shadow.setRadius(30);
shadow.setBlur(15);
shadow.setColor("#60373F26");
p->drawBoxShadow(shadow);
// Paint rounded rect
p->beginPath();
p->roundRect(rect, 30);
p->setFillStyle("#DBEB00");
p->fill();
// Paint text
p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QFont font("Titillium Web", 18);
p->setFont(font);
p->setFillStyle("#373F26");
p->fillText("CLICK!", rect);

以下は、単純なグラフを描画する別の例です。

白い軸を持つ暗いグリッドの上に、緑から赤へと変化する影付きのS字カーブが描かれている
// Paint grid
QCanvasGridPattern grid(0, 0, 10, 10);
grid.setLineColor("#404040");
grid.setBackgroundColor("#202020");
p->setFillStyle(grid);
p->fillRect(0, 0, width(), height());
// Paint axis
p->setFillStyle(QColorConstants::White);
p->fillRect(0, 0.5 * height() - 1, width(), 2);
p->fillRect(0.5 * width() - 1, 0, 2, height());
// Paint shadowed graph
p->beginPath();
p->moveTo(20, height() * 0.8);
p->bezierCurveTo(width() * 0.2, height() * 0.4,
                 width() * 0.5, height() * 0.8,
                 width() - 20, height() * 0.2);
p->setAntialias(10);
p->setLineWidth(12);
p->setStrokeStyle("#D0000000");
p->stroke();
p->setAntialias(1);
p->setLineWidth(6);
QCanvasLinearGradient lg(0, 0, 0, height());
lg.setStartColor(QColorConstants::Red);
lg.setEndColor(QColorConstants::Green);
p->setStrokeStyle(lg);
p->stroke();

機能

概して、また命名規則の観点から、QCanvasPainterはHTML Canvas 2D Context (https://html.spec.whatwg.org/multipage/canvas.html#2dcontext) に従っています。 これにより、多くの開発者にとってAPIの使い勝手が良くなり、既存のCanvasコードを容易に再利用できるようになります。ただし、HTML Canvasと100%互換性を持つことを目的としているわけではありません。 QCanvasPainterは、よりシンプルにし、QRhi のハードウェアアクセラレーション対応グラフィックスAPI上でより高いパフォーマンスを発揮させ、現代のUIニーズにより適切に対応するために、一部の機能を省略しています。これらの理由から、QCanvasPainterにはHTML Canvas 2D Contextに比べて追加の機能も備わっています。

以下は、HTML Canvasと比較して、少なくとも現時点では実装されていない機能の一部です:

  • クリッピング:すべてのクリッピングは(変形された)矩形であり、パス形状へのクリッピングはサポートされていません。
  • 破線:ストロークは常に実線であり、破線や点線のストロークパターンはサポートされていません。
  • パス検査:isPointInPath() や isPointInStroke() メソッドは存在しません。
  • テキストのストローク:テキストのアウトラインストロークはサポートされていません。
  • フィルタ:CanvasのSVGフィルタ効果はサポートされていません。
  • 合成モード:合成モードの数は 3 つに制限されており、追加のバッファにレンダリングすることなくサポート可能です。
  • シャドウ:組み込みのシャドウメソッドはサポートされていません。

一方、HTML Canvasと比較してQCanvasPainterが提供する追加機能には、次のようなものがあります。

  • パスグループ:QCanvasPainter では、静的なパスへの描画が可能であり、GPU を最適に活用するために、これらのパスをグループとしてキャッシュすることができます。
  • 調整可能なアンチエイリアシング: パス頂点のアンチエイリアシングと SDF テキストレンダリングにより、アンチエイリアシングのピクセル数を自由に調整して、より滑らかな描画を実現できます。
  • ボックスグラデーション:線形、放射状、円錐状のグラデーションに加え、QCanvasPainterは角丸長方形のボックスグラデーションもサポートしています。
  • ボックスシャドウ:QCanvasPainter は、CSS の box-shadow タイプのブラシもサポートしています。レンダリングには、Qt Quick RectangularShadow と同様の SDF アプローチが採用されており、非常に高いパフォーマンスを発揮します。
  • グリッドパターン:QCanvasPainterは、動的なグリッドおよびバーパターンのスタイルのためにQCanvasGridPattern をサポートしています。
  • カスタムブラシ:QCanvasPainter では、カスタム頂点シェーダーおよびフラグメントシェーダー(QCanvasCustomBrush )を使用した塗りつぶしやストロークも可能です。これらのカスタムブラシはテキストにも使用できます。
  • テキストの折り返し: QCanvasPainter は、さまざまな折り返しモードによるテキストの複数行への自動折り返しをサポートしています。
  • カラーエフェクト:globalAlpha に加え、QCanvasPainter はグローバルな明るさ、コントラスト、彩度もサポートしています。
  • 色調のついた画像:QCanvasPainter は、描画された画像や画像パターンに対して色調のサポートを追加しています。

QCanvasPainterはアーキテクチャに依存せず、Qt Quick およびQt Widgets アプリケーションの両方で使用可能です。実際、これらを使用しなくても、QWindow およびQRhi だけで利用できます。QCanvasPainterを利用するには、アプリケーションのアーキテクチャに応じて、以下のクラスのいずれかから使用してください:

塗りつぶしルール

QCanvasPainter は、デフォルトでNonZero ({Qt::WindingFill}) 塗りつぶしルールを使用します。パス上の点の方向に基づいて塗りつぶしを選択するには、setWindingEnforce(false) を呼び出して、巻き方向の強制を無効にしてください。

緑色の下向きの三角形で、その頂点付近に、それより小さい塗りつぶされていない三角形の穴があるもの
p->setWindingEnforce(false);
p->beginPath();
// Outer shape, counterclockwise
p->moveTo(20, 20);
p->lineTo(100, 180);
p->lineTo(180, 20);
p->closePath();
// Inner shape, clockwise
p->moveTo(100, 40);
p->lineTo(125, 90);
p->lineTo(75, 90);
p->closePath();
p->fill();
p->stroke();

ただし、より一般的なケースとしては、巻き方向の強制に依存し、setPathWinding() またはbeginHoleSubPath() およびbeginSolidSubPath() ヘルパーを使用して、希望する巻き方向を設定する方法が挙げられます。

緑色の丸みを帯びた四角形の輪郭で囲まれた、丸みを帯びた穴があり、その穴の中には実線の棒と点が描かれている
p->beginPath();
p->roundRect(20, 20, 160, 160, 30);
// Start painting holes
p->beginHoleSubPath();
p->roundRect(40, 40, 120, 120, 10);
// Start painting solid
p->beginSolidSubPath();
p->rect(60, 60, 80, 20);
p->circle(100, 120, 20);
p->fill();
p->stroke();

メンバ型のドキュメント

enum class QCanvasPainter::CompositeOperation

Qt Canvas Painter は、以下の 3 つの合成操作をサポートしています:

定数値説明
QCanvasPainter::CompositeOperation::SourceOver0デフォルト値。既存のコンテンツの上に新しい図形を描画します。
QCanvasPainter::CompositeOperation::SourceAtop1新しい図形は、既存のコンテンツと重なる部分のみ描画されます。
QCanvasPainter::CompositeOperation::DestinationOut2新しい図形と重ならない部分については、既存のコンテンツが保持されます。

関連項目: setGlobalCompositeOperation()。

[since 6.12] enum class QCanvasPainter::FillRule

この列挙型は、パスの埋め込み方法を指定します。

定数値説明
QCanvasPainter::FillRule::NonZero0パスは、ゼロ以外のワインディングルールを使用して塗りつぶされます。このルールでは、次の方法を用いて、点が図形の内部にあるかどうかを判定します。その点から図形の外側の位置まで水平線を引きます。各交点における線の方向が上向きか下向きかを判定します。 各交点における線の方向を合計することで、ワインディング数が決定されます。その数が 0 以外の場合、その点は図形の内部にあります。この塗りつぶしモードは、ほとんどの場合、閉じた図形の交点として考えることもできます。このモードがデフォルトです。
QCanvasPainter::FillRule::EvenOdd1パスは、奇数・偶数塗りつぶしルールを使用して塗りつぶされます。このルールでは、点が図形の内部にあるかどうかを次の方法で判定します。その点から図形の外側の位置まで水平線を引いて、交点の数を数えます。交点の数が奇数であれば、その点は図形の内部にあります。

この列挙型は Qt 6.12 で導入されました。

fill()も参照してください 。

enum class QCanvasPainter::ImageFlag
flags QCanvasPainter::ImageFlags

この列挙型は、画像に関連するフラグを指定します。フラグを設定するには、addImage() とともに使用してください。

定数値説明
QCanvasPainter::ImageFlag::GenerateMipmaps1 << 0画像のミップマップを生成するには、これを設定します。元のサイズより小さく拡大縮小される画像について、より滑らかな出力を希望する場合は、ミップマップを使用すべきです。
QCanvasPainter::ImageFlag::RepeatX1 << 1画像パターンと組み合わせて使用し、X座標方向に画像を繰り返し表示します。
QCanvasPainter::ImageFlag::RepeatY1 << 2画像パターンと組み合わせて使用し、Y座標方向に画像を繰り返し表示します。
QCanvasPainter::ImageFlag::RepeatRepeatX | RepeatY画像パターンと組み合わせて使用すると、両方の座標軸に沿って画像が繰り返し表示されます。
QCanvasPainter::ImageFlag::FlipY1 << 3レンダリング時に、画像を Y 方向に反転(反転)させます。
QCanvasPainter::ImageFlag::Premultiplied1 << 4画像データには、アルファ値が事前に乗算されています。
QCanvasPainter::ImageFlag::Nearest1 << 5画像の補間は「線形」ではなく「最近傍」です。

ImageFlags 型は、QFlags<ImageFlag> の typedef です。これは、ImageFlag 値の OR 組み合わせを格納します。

enum class QCanvasPainter::LineCap

LineCap は、線の端(キャップ)の描画方法を定義するために使用されます。

定数値説明
QCanvasPainter::LineCap::Butt0(デフォルト) 線の終点を覆わない、四角形の線端。
QCanvasPainter::LineCap::Round1丸い線の終端。
QCanvasPainter::LineCap::Square2終点を覆い、線幅の半分だけ終点を越えて伸びる角型の線端。

setLineCap()も参照してください 。

enum class QCanvasPainter::LineJoin

LineJoin は、2 本の接続された線間の接合部をどのように描画するかを定義するために使用されます。

定数値説明
QCanvasPainter::LineJoin::Round02 本の線間の円弧が塗りつぶされます。
QCanvasPainter::LineJoin::Bevel12 本の線の間にある三角形の切り欠き部分が塗りつぶされます。
QCanvasPainter::LineJoin::Miter2(デフォルト) 2 本の線の外縁が角度を成して交わるように延長され、その領域が塗りつぶされます。

関連項目: setLineJoin() およびsetMiterLimit()。

enum class QCanvasPainter::PathConnection

一部の描画メソッドでは、PathConnection を使用して、新しいパスを前のパスの最後の点に接続するかどうかを指定します。

定数値説明
QCanvasPainter::PathConnection::NotConnected0前のパスの最後の点から現在のパスの最初の点へは線が描画されません。
QCanvasPainter::PathConnection::Connected1前のパスの最後の点と、現在のパスの最初の点が接続されます。

arc()も参照してください 。

enum class QCanvasPainter::PathWinding

PathWinding は、パスの描画方向を指定するために使用されます。この方向は、サブパスがパス上で実線部分であるか、穴であるかを判断するために使用されます。

定数値説明
QCanvasPainter::PathWinding::CounterClockWise0(デフォルト) 実線形状の場合は反時計回りの巻き方。
QCanvasPainter::PathWinding::ClockWise1穴の場合は、時計回りの巻き方向になります。

setPathWinding()も参照してください 。

enum class QCanvasPainter::TextAlign

TextAlign は、テキストの水平方向の配置方法を定義するために使用されます。

定数値説明
QCanvasPainter::TextAlign::Left0テキストの左端を、指定された位置に水平方向に揃えます。
QCanvasPainter::TextAlign::Right1テキストの右端を、指定された位置に水平方向に揃えます。
QCanvasPainter::TextAlign::Center2テキストの中央を、指定された位置に水平方向に揃えます。
QCanvasPainter::TextAlign::Start3(デフォルト) テキストは行の通常の開始位置に揃えられます (左から右へのロケールでは左揃え、右から左へのロケールでは右揃え)。
QCanvasPainter::TextAlign::End4テキストは、行の通常の末尾に揃えられます (左から右へのロケールでは右揃え、右から左へのロケールでは左揃え)。

setTextAlign()、setTextDirection()、およびfillText()も参照してください 。

enum class QCanvasPainter::TextBaseline

TextBaseline は、テキストの垂直方向の位置合わせ(ベースライン)を定義するために使用されます。

定数値説明
QCanvasPainter::TextBaseline::Top0テキストの上端を、指定された位置に垂直方向に揃えます。
QCanvasPainter::TextBaseline::Hanging1テキストのハンギングベースラインを、指定された位置に垂直に揃えます。
QCanvasPainter::TextBaseline::Middle2テキストの中央を、指定された位置に垂直方向に揃えます。
QCanvasPainter::TextBaseline::Alphabetic3(デフォルト) テキストのベースラインを、指定された位置に垂直方向に揃えます。
QCanvasPainter::TextBaseline::Bottom4テキストの下端を、指定された位置に垂直に揃えます。

setTextBaseline() およびfillText()も参照してください 。

enum class QCanvasPainter::TextDirection

TextDirection は、テキストの水平方向の配置方法を定義するために使用されます。

定数値説明
QCanvasPainter::TextDirection::LeftToRight0テキストの方向は左から右です。
QCanvasPainter::TextDirection::RightToLeft1テキストの方向は右から左です。
QCanvasPainter::TextDirection::Inherit2(デフォルト) テキストの方向は、QGuiApplication の layoutDirection から継承されます。https://doc.qt.io/qt-6/qguiapplication.html#layoutDirection-prop を参照してください。
QCanvasPainter::TextDirection::Auto3テキストの方向は、テキスト文字列に基づいて自動的に検出されます。QString::isRightToLeft() を参照してください。

注: テキストの解析が必要なため 、他のオプションに比べて処理速度が低下する可能性があります。

関連項目: setTextDirection(),setTextAlign(),fillText().

enum class QCanvasPainter::WrapMode

WrapMode は、テキストを複数行にどのように折り返すかを定義するために使用されます。

定数値説明
QCanvasPainter::WrapMode::NoWrap0(デフォルト) 改行は行われません。テキストに含まれる改行が不十分な場合、contentWidth は設定された幅を超過します。
QCanvasPainter::WrapMode::Wrap1可能であれば、単語の区切りで改行が行われます。そうでない場合は、単語の途中であっても、行内の適切な位置で改行が行われます。
QCanvasPainter::WrapMode::WordWrap2改行は単語の境界でのみ行われます。単語が長すぎる場合、コンテンツの幅が設定された幅を超過します。
QCanvasPainter::WrapMode::WrapAnywhere3行内の任意の箇所で改行が行われます。単語の途中であっても同様です。

setTextWrapMode() およびfillText()も参照してください 。

メンバ関数のドキュメント

QCanvasPainter::QCanvasPainter()

ペインターを構築します。

[noexcept] QCanvasPainter::~QCanvasPainter()

画家を破滅させる。

qsizetype QCanvasPainter::activeImageCount() const

このQCanvasPainter に登録されている、アクティブなQCanvasImage オブジェクトの数を返します。これには、gradients 用に内部で作成された画像も含まれます。

QCanvasImage QCanvasOffscreenCanvas インスタンスの登録によって作成されたオブジェクトや、外部で管理されているテクスチャは、この関数では考慮されません。

activeImageMemoryUsage()、addImage()、およびremoveImage()も参照してください 。

qsizetype QCanvasPainter::activeImageMemoryUsage() const

このペインターに対して、QImage を引数とするaddImage()のオーバーロードによって作成された、すべてのアクティブなQCanvasImage インスタンスについて、画像(ピクセル)データが使用するメモリのおおよその量(キロバイト単位)を返します。これには、gradients 用に内部で作成された画像のデータも含まれます。

QCanvasPainter addImage()が返った後、CPU側の データのコピーは保持されません。したがって、この関数の結果は、テクスチャに使用されるGPUメモリの近似値となります。QImage

注:この 値は 、画像形式と寸法に基づいた推定値に過ぎません。Qtは、テクスチャ用のデータがGPU側のメモリにどのように格納され、配置されているかについては認識していません。

addImage() の他のオーバーロードを介して登録されたオフスクリーン・キャンバスや外部管理のテクスチャは、この関数では考慮されません。

有効な `QCanvasImage` については、sizeInBytes()` を呼び出すことで、個々のサイズ(バイト単位)を常に照会できます。この関数は、QCanvasImage が `QCanvasOffscreenCanvas ` または `QRhiTexture` から作成された場合にも有効な結果を返しますが、ミップマップやマルチサンプルデータは考慮しません。

activeImageCount()、addImage()、およびremoveImage()も参照してください 。

QCanvasImage QCanvasPainter::addImage(const QImage &image, QCanvasPainter::ImageFlags flags = {})

image を追加し、flags をペインターがテクスチャとして利用できるようにします。QCanvasImage を、テクスチャIDや画像に関するその他の情報とともに返します。返されたQCanvasImage は、drawImage やQCanvasImagePattern で使用できます。このメソッドを呼び出した後、image QImage をメモリ内に保持しておく必要はありません。

同じimage を使用して呼び出すことは、キャッシュヒットが見込まれるため、負荷の少ない操作です。

addImage() を 1 回だけ呼び出すように最適化を行う際は注意が必要です。アプリケーションの設計によっては、それだけでは不十分な場合もあります。 たとえば、ウィジェットが新しいトップレベルに移動されたことにより、内部でペインターが新しいQRhi に関連付けられ、基になるグラフィックリソースが失われた場合、image からネイティブのグラフィックテクスチャを再作成するには、この関数を呼び出すことが不可欠です。

drawImage() およびremoveImage()も参照してください 。

QCanvasImage QCanvasPainter::addImage(QRhiTexture *texture, QCanvasPainter::ImageFlags flags = {})

texture を追加し、flags をペインター用のテクスチャとして利用可能にします。返されるQCanvasImage は、drawImage およびQCanvasImagePattern で使用できます。

注: texture の所有権は 取得されません。

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

drawImage() およびremoveImage()も参照してください 。

QCanvasImage QCanvasPainter::addImage(const QCanvasOffscreenCanvas &canvas, QCanvasPainter::ImageFlags flags = {})

canvas をflags としてペインターに登録し、画像として利用できるようにします。返されるQCanvasImage は、drawImage およびQCanvasImagePattern で使用できます。

注: canvas は 引き続き基になるネイティブのグラフィックスリソースを管理するため、removeImage()を実行してもcanvas が無効になることはありません。

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

drawImage() およびremoveImage()も参照してください 。

void QCanvasPainter::addPath(const QPainterPath &path)

現在のパスに「path 」を追加します。

注: QCanvasPainter では デフォルトでNonZero (Qt::WindingFill) の fillRule が使用されますが、QPainterPath ではデフォルトでQt::OddEvenFill が使用されます。そのため、必要に応じて、例えばsetFillRule() を使用するなどして、fillRule を切り替えることを忘れないでください。

注:このメソッドは 、主にQPainter およびQPainterPath との互換性を確保するために用意されています。QCanvasPainter メソッドを使用してパスを直接描画する場合と比べて、パフォーマンスの向上にはつながりません。

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

path を現在のパスに追加します。必要に応じてtransform を使用して、パスの各点を変更することもできます。transform が指定されていない場合(またはそれが単位行列である場合)、パスデータを再利用するため、この操作は非常に高速に行われます。

2つの同じ緑色の円。2つ目は1つ目の円を平行移動させたものです。
// m_path is QCanvasPath
if (m_path.isEmpty())
    m_path.circle(60, 60, 40);
p->beginPath();
p->addPath(m_path);
p->addPath(m_path, QTransform::fromTranslate(80, 80));
p->fill();
p->stroke();

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

start のコマンドから始まり、count 個のコマンドを含む、path を現在のパスに追加します。必要に応じて、transform を使用してパスの指す先を変更できます。start とcount の範囲がチェックされるため、QCanvasPath::commandsSize() を超えるコマンドにはアクセスされません。パスを現在のパス位置から継続させない場合は、まずmoveTo() を呼び出してください(例:path.positionAt(start - 1) )。

同じ波形の短い部分が下にコピーされており、その上に正弦波が重なっている
// m_path is QCanvasPath
if (m_path.isEmpty()) {
    m_path.moveTo(20, 60);
    for (int i = 1; i < 160; i++) {
        m_path.lineTo(20 + i,
                      60 + 20 * sin(0.1 * i));
    }
}
p->stroke(m_path);
p->beginPath();
p->addPath(m_path, 20, 100,
           QTransform::fromTranslate(0, 80));
p->stroke();

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

新しい円弧状のサブパスを作成します。円弧の中心はcenterX 、centerY にあり、半径はradius です。円弧は角度a0 からa1 まで描かれ、direction (ClockWise またはCounterClockWise )でスイープされます。connection がNotConnected の場合、円弧は前のパスの位置から円弧の始点まで線を追加しません。角度はラジアン単位で指定されます。

円の4分の3を緑色の円形が埋め尽くし、残りの4分の1が空いている
p->beginPath();
p->moveTo(100, 100);
p->arc(100, 100, 80, 0, 1.5 * M_PI);
p->closePath();
p->fill();
p->stroke();

注: HTML Canvas 2D コンテキストでは、 円の描画に arc()を使用しますが 、QCanvasPainter では、その代わりにcircle() またはellipse() を使用することを推奨します。

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

新しい円弧状のサブパスを作成します。円弧の中心はcenterPoint にあり、半径はradius です。円弧は角度a0 からa1 まで描画され、direction (ClockWise またはCounterClockWise )でスイープされます。connection がNotConnected の場合、円弧は前のパスの位置から円弧の始点までの線を追加しません。角度はラジアン単位で指定されます。

注: HTML Canvas 2D コンテキストでは、 円の描画に arc()が使用されますが 、QCanvasPainter では、その代わりにcircle() またはellipse() を使用することが推奨されます。

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

void QCanvasPainter::arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius)

最後のパスポイントと、指定された2つの点(x1 、y1 およびx2 、y2 )を、radius で結ぶ円弧のセグメントを、その角に追加します。必要に応じて、この円弧はパスの最新のポイントと直線で自動的に接続されます。

上部が水平な部分、大きな丸みを帯びたカーブ、そして末端に小さなカールがあるフック状のパス
p->beginPath();
p->moveTo(20, 20);
p->arcTo(240, 20, 20, 220, 50);
p->arcTo(20, 220, 20, 20, 30);
p->stroke();

void QCanvasPainter::arcTo(QPointF controlPoint1, QPointF controlPoint2, qreal radius)

最後のパスポイントと、指定された2つの点(controlPoint1 およびcontrolPoint2 )を、radius で結ぶ円弧セグメントを、その角に追加します。必要に応じて、この円弧はパスの最新のポイントと直線で自動的に接続されます。

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

void QCanvasPainter::beginHoleSubPath()

「hole」サブパスを開始します。これは、setPathWinding(QCanvasPainter::PathWinding::ClockWise)) と同等です。

四角い穴の開いた緑色の円の中に、それより小さな実線の緑色の円が入っている
p->beginPath();
p->circle(100, 100, 80);
p->beginHoleSubPath();
p->rect(60, 60, 80, 80);
p->beginSolidSubPath();
p->circle(100, 100, 20);
p->fill();
p->stroke();

beginSolidSubPath( )も参照してください 。

void QCanvasPainter::beginPath()

現在のパスをクリアしながら、新しいパスの描画を開始します。

void QCanvasPainter::beginSolidSubPath()

堅牢なサブパスを開始します。これは、setPathWinding(QCanvasPainter::PathWinding::CounterClockWise)) と同等です。

beginHoleSubPath()も参照してください 。

void QCanvasPainter::bezierCurveTo(qreal cp1X, qreal cp1Y, qreal cp2X, qreal cp2Y, qreal x, qreal y)

パスの最後の点から、2つの制御点(cp1X 、cp1Y およびcp2X 、cp2Y )を経由して、指定された点(x 、y )まで、3次ベジエ曲線のセグメントを追加します。

滑らかなS字型の3次ベジェ曲線
p->beginPath();
p->moveTo(20, 20);
p->bezierCurveTo(150, 50, 50, 250, 180, 120);
p->stroke();

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

パスの最後の点から、2つの制御点(controlPoint1 およびcontrolPoint2 )を経由して、指定された点endPoint まで、3次ベジエ曲線のセグメントを追加します。

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

void QCanvasPainter::circle(qreal centerX, qreal centerY, qreal radius)

(centerX,centerY)を中心とし、半径radius の新しい円形のサブパスを作成します。

濃いティール色の縁取りのある緑色の円
p->beginPath();
p->circle(100, 100, 80);
p->fill();
p->stroke();

void QCanvasPainter::circle(QPointF centerPoint, qreal radius)

centerPoint を中心とし、radius の半径を持つ新しい円形のサブパスを作成します。

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

void QCanvasPainter::cleanupResources()

キャッシュから未使用のテクスチャを削除するスケジュール。

さらに、メモリ使用量を最小限に抑えるため、この関数の呼び出しに伴い、他のキャッシュやプールが縮小される場合があります。これにより、その後の描画処理のコストが増加する可能性があります。

void QCanvasPainter::clearRect(qreal x, qreal y, qreal width, qreal height)

x 、y 、width 、height で指定された矩形領域内のピクセルを、透明な黒で塗りつぶして消去します。消去処理にはブレンド処理が不要なため、fillRect() よりも高速に実行される場合があります。

上部に縦長の長方形の切り欠きがある緑色の円(その切り欠きが消されている)
p->beginPath();
p->circle(100, 100, 80);
p->fill();
p->stroke();
p->clearRect(60, 0, 80, 120);

void QCanvasPainter::clearRect(const QRectF &rect)

rect で指定された矩形領域を、透明な黒で塗りつぶして、その領域内のピクセルを消去します。これは、QRectF を使用したオーバーロードされたメソッドです。

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

void QCanvasPainter::closePath()

現在のサブパスを線分で閉じます。これは、最後のパス要素として `lineTo([始点])` を指定することと同等です。

QCanvasOffscreenCanvas QCanvasPainter::createCanvas(QSize pixelSize, int sampleCount = 1, QCanvasOffscreenCanvas::Flags flags = {})

指定されたpixelSize 、sampleCount 、およびflags を持つ新しいオフスクリーン・キャンバスを返します。

キャンバスのサイズはピクセル単位で指定されます。pixelSize 、sampleCount 、およびflags のプロパティは、その後変更できません。異なるサイズ、サンプル数、またはフラグを持つキャンバスを取得するには、新しいキャンバスを作成してください。

描画コマンドでオフスクリーン・キャンバスを指定するには、低レベルAPIを使用する場合は適切なQCanvasRhiPaintDriver::beginPaint()のオーバーロードを呼び出し、利便性ウィジェットやQt Quick アイテムクラスを使用する場合はQCanvasPainterWidget::beginCanvasPainting()またはQCanvasPainterItemRenderer::beginCanvasPainting()を呼び出します。

通常、キャンバスへの描画時には、その内容がクリアされます。これを無効にするには、flags 内でPreserveContents を渡してください。

キャンバスへのマルチサンプルレンダリング(マルチサンプルアンチエイリアシング、MSAA)を要求するには、サンプル数を 1 より大きい値(4 や 8 など)に設定します。ただし、マルチサンプリングが有効になっている場合、レンダリングパス間でキャンバスの内容を保持することはサポートされておらず、この場合はPreserveContents フラグは機能しません。

注: オフスクリーン・キャンバスは 、メインのレンダリングターゲットとは独立したテクスチャによって裏付けられており、そこへのレンダリングは常にスケール係数(デバイス・ピクセル比)1で行われます。たとえば、QCanvasPainterWidget の実際のレンダリング寸法に一致するキャンバスを作成するには、size() * devicePixelRatio() をpixelSize として渡してください。これは、ウィジェットのsize() が、スケール係数を含まない論理サイズにすぎないためです。

void QCanvasPainter::destroyCanvas(QCanvasOffscreenCanvas &canvas)

canvas を支えているリソースを破棄します。これにより、canvas はnull canvas となります。

ペインターは、破棄時に自動的にこの処理を行います。したがって、この関数を呼び出す必要があるのは、関連するリソースを直ちに解放したい場合のみです。

void QCanvasPainter::drawBoxShadow(const QCanvasBoxShadow &shadow)

shadow を使用してボックスを描画します。シャドウは、shadow で定義された位置、サイズ、色、ぼかしなどの設定に従って描画されます。このメソッドを呼び出す前にbeginPath() を呼び出す必要はありません。

注: drawBoxShadow() で描画される領域を視覚的に確認するには 、QCPAINTER_DEBUG_SHADOW_RECT 環境変数を設定してください。

緑色の丸みを帯びた四角形で、四方すべてに柔らかな灰色のボックスシャドウを落としている
QRectF rect(40, 40, 120, 120);
QRectF shadowRect = rect.translated(-2, 4);
QCanvasBoxShadow shadow(shadowRect);
shadow.setBlur(30);
p->drawBoxShadow(shadow);
p->beginPath();
p->roundRect(rect, 30);
p->setFillStyle("#2CDE85");
p->fill();

QCanvasBoxShadowも参照してください 。

void QCanvasPainter::drawImage(const QCanvasImage &image, qreal x, qreal y)

image を、デフォルトのサイズでx およびy に描画します。

デフォルトのサイズで描画されたグリーンのQtロゴ
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
p->drawImage(image, 36, 36);

addImage()も参照してください 。

void QCanvasPainter::drawImage(const QCanvasImage &image, const QRectF &destinationRect)

image を、destinationRect の位置とサイズに合わせて描画します。

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

addImage()も参照してください 。

void QCanvasPainter::drawImage(const QCanvasImage &image, const QRectF &sourceRect, const QRectF &destinationRect)

画像のsourceRect 領域から、image をdestinationRect の位置とサイズに合わせて描画します。

Qtロゴのソース領域から切り抜いた、拡大された「Q」の文字
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
QRectF sourceRect(20, 30, 54, 76);
QRectF destinationRect(0, 0, 200, 200);
p->drawImage(image, sourceRect, destinationRect);

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

addImage()も参照してください 。

void QCanvasPainter::drawImage(const QCanvasImage &image, qreal x, qreal y, qreal width, qreal height)

image を、指定されたwidth およびheight において、x 、y に描画します。

Green Qtのロゴを、指定された幅と高さに合わせるために縦方向に引き伸ばしました
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
p->drawImage(image, 50, 0, 100, 200);

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

addImage()も参照してください 。

void QCanvasPainter::ellipse(qreal centerX, qreal centerY, qreal radiusX, qreal radiusY)

(centerX,centerY) を中心とし、radiusX およびradiusY を持つ新しい楕円形のサブパスを作成します。

濃いティール色の輪郭線が入った、幅広の緑色の楕円
p->beginPath();
p->ellipse(100, 100, 80, 60);
p->fill();
p->stroke();

void QCanvasPainter::ellipse(const QRectF &rect)

rect 内に、新しい楕円形のサブパスを作成します。この楕円は、rect の領域を覆うことになります。

緑色の塗りつぶされた長方形の中に収まった、背の高い楕円の輪郭
QRectF rect(40, 20, 120, 160);
p->fillRect(rect);
p->beginPath();
p->ellipse(rect);
p->stroke();

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

void QCanvasPainter::ellipse(QPointF centerPoint, qreal radiusX, qreal radiusY)

centerPoint を中心とし、radiusX およびradiusY のパラメータを持つ、新しい楕円形のサブパスを作成します。

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

void QCanvasPainter::fill()

現在のパスに、現在の塗りつぶしスタイルと塗りつぶしルールを適用します。

2本の緑色の棒と1つの緑色の円が、1つの組み合わせた形にまとまったもの
p->beginPath();
p->rect(20, 20, 40, 160);
p->rect(140, 20, 40, 160);
p->circle(100, 100, 60);
p->fill();

setFillStyle() およびsetFillRule()も参照してください 。

[since 6.12] void QCanvasPainter::fill(QCanvasPainter::FillRule fillRule)

現在のパスを、現在の塗りつぶしスタイルおよび塗りつぶしルールfillRule で塗りつぶします。

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

この関数は Qt 6.12 で導入されました。

setFillStyle() およびsetFillRule()も参照してください 。

void QCanvasPainter::fill(const QCanvasPath &path, int pathGroup = -1)

path を、現在の塗りつぶしスタイルと塗りつぶしルールで塗りつぶし、pathGroup に格納します。QCanvasPath による描画は、パスに含まれるコマンドが多く、かつその大部分が静的な場合に最適です。

pathGroup が-1 の場合、パスはGPU側でキャッシュされません。これがデフォルトの設定です。パスデータのキャッシュを要求するには、0 以上の値を指定してください。パスキャッシュグループの使用に関する詳細については、QCanvasPath のドキュメントを参照してください。

このメソッドを呼び出す前にbeginPath() を呼び出す必要はありません。

幅の異なる中実の横棒が積み重なって、砂時計のような輪郭を形成している
// m_path is QCanvasPath
if (m_path.isEmpty()) {
    for (int i = 0; i < 16; i++) {
        qreal w = 100 + 60 * sin(i);
        m_path.rect(100 - w * 0.5,
                    22 + i * 10,
                    w, 6);
    }
}
p->fill(m_path);

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

setFillStyle()、setFillRule()、およびremovePathGroup()も参照してください 。

[since 6.12] void QCanvasPainter::fill(const QCanvasPath &path, QCanvasPainter::FillRule fillRule, int pathGroup = -1)

path に、現在の塗りつぶしスタイルと塗りつぶしルールを適用しますfillRule

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

この関数は Qt 6.12 で導入されました。

void QCanvasPainter::fillRect(qreal x, qreal y, qreal width, qreal height)

指定された位置(x 、y )に、サイズwidth 、height の塗りつぶされた長方形を描画します。

注:これは 利便性のために提供されています。複数の矩形を塗りつぶす場合は、rect() を使用することを推奨します。

中が塗りつぶされた緑色の正方形
p->fillRect(20, 20, 160, 160);
// The above code does same as:
//  p->beginPath();
//  p->rect(20, 20, 160, 160);
//  p->fill();

void QCanvasPainter::fillRect(const QRectF &rect)

rect に塗りつぶされた矩形を描画します。これは、QRectF を使用したオーバーロードされたメソッドです。

注:これは 利便性のために提供されています。複数の矩形を塗りつぶす場合は、rect() を使用することを推奨します。

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

void QCanvasPainter::fillText(const QString &text, qreal x, qreal y, qreal maxWidth = 0)

指定された位置(x 、y )に、現在のtextAlignおよびtextBaselineを使用して、text 文字列を描画します。テキストを複数行に折り返すには、setTextWrapMode() を使用して、テキストの折り返しモードをデフォルトのNoWrap 以外の値に設定してください。オプションのmaxWidth パラメータのデフォルト値は0 です。つまり、例えばWordWrap が設定されている場合、テキストは単語ごとに折り返されます。maxWidth パラメータを、希望する行幅(ピクセル単位)に設定します。

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QString text("Qt Canvas Painter");
p->fillText(text, 100, 30);
p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap);
p->fillText(text, 100, 90);
p->fillText(text, 100, 160, 120);

setTextAlign()、setTextBaseline()、およびsetTextWrapMode()も参照してください 。

void QCanvasPainter::fillText(const QString &text, const QRectF &rect)

現在のtextAlignおよびtextBaselineを使用して、rect 内にtext 文字列を描画します。rectパラメータの幅がmaxWidthとして使用されます。

これは、QRectF を使用するオーバーロードされたメソッドです。このメソッドでテキストを描画する際、テキストのベースラインをTextBaseline::Top またはTextBaseline::Middle に設定すると便利な場合がよくあります。

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QString text("Qt Canvas Painter");
QRectF rect1(10, 20, 180, 50);
p->strokeRect(rect1);
p->fillText(text, rect1);
p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap);
QRectF rect2(60, 90, 80, 90);
p->strokeRect(rect2);
p->fillText(text, rect2);

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

setTextAlign()、setTextBaseline()、およびsetTextWrapMode()も参照してください 。

void QCanvasPainter::fillText(const QString &text, QPointF point, qreal maxWidth = 0)

指定されたpoint に、現在のtextAlignおよびtextBaselineを使用して、text 文字列を描画します。テキストを複数行に折り返すには、setTextWrapMode() を使用して、テキストの折り返しモードをデフォルトのNoWrap 以外の値に設定してください。オプションのmaxWidth パラメータのデフォルト値は0 です。つまり、例えばWordWrap が設定されている場合、テキストは単語ごとに折り返されます。maxWidth パラメータを、希望する行幅(ピクセル単位)に設定します。

これは、QPointF を使用するオーバーロードされたメソッドです。

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

setTextAlign()、setTextBaseline()、およびsetTextWrapMode()も参照してください 。

QTransform QCanvasPainter::getTransform() const

現在のトランスフォームを返します。

void QCanvasPainter::lineTo(qreal x, qreal y)

パスの最後の点から、(x,y) の点までの線分を追加します。

ある点で交わり、角を形成する2本の直線
p->beginPath();
p->moveTo(20, 20);
p->lineTo(140, 180);
p->lineTo(180, 120);
p->stroke();

void QCanvasPainter::lineTo(QPointF point)

パスの最後の点からpoint までの線分を追加します。

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

void QCanvasPainter::moveTo(qreal x, qreal y)

(x,y) を最初の点として、新しいサブパスを開始します。

void QCanvasPainter::moveTo(QPointF point)

point を最初の点として、新しいサブパスを開始します。

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

void QCanvasPainter::quadraticCurveTo(qreal cpX, qreal cpY, qreal x, qreal y)

パスの最後の点から、制御点(cpX 、cpY )を経由して、指定された点(x 、y )に至る2次ベジエセグメントを追加します。

2つの2次曲線で形成された、とがった緑色の葉の形
p->beginPath();
p->moveTo(20, 20);
p->quadraticCurveTo(150, 50, 180, 180);
p->quadraticCurveTo(20, 220, 20, 20);
p->fill();
p->stroke();

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

パスの最後の点から、controlPoint を経由して、指定されたendPoint までの2次ベジエセグメントを追加します。

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

void QCanvasPainter::rect(qreal x, qreal y, qreal width, qreal height)

座標x 、y の位置に、サイズwidth 、height の新しい長方形のサブパスを作成します。

濃いティール色の枠線が入った、中が緑色の正方形
p->beginPath();
p->rect(20, 20, 160, 160);
p->fill();
p->stroke();

void QCanvasPainter::rect(const QRectF &rect)

rect に、新しい長方形のサブパスを作成します。これは、QRectF を使用したオーバーロードされたメソッドです。

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

void QCanvasPainter::removeImage(const QCanvasImage &image)

image に関連付けられたリソースを解放し、ペインタから画像を削除します。

注: テクスチャなどのリソースは、ペインターのデストラクタで自動的に解放されるため、通常はこの関数を 呼び出す必要はありません。この関数は、画像の数が多く、そのうちのいくつかがもはや使用されていないためにメモリ使用量を削減する必要がある場合に役立ちます。

注:削除された 画像は、それ以降、ペイント操作で使用できなくなります。

注: 基盤となる 3D API で作成されたテクスチャなどのリソースは 、すぐには解放されない場合があります。このような操作は、通常、アクティブな描画コールセットが送信された後に、この `QCanvasPainter ` が再び描画を開始する次のフレームまで延期されることがあります。

addImage()も参照してください 。

void QCanvasPainter::removePathGroup(int pathGroup)

pathGroup をペインターキャッシュから削除します。その後、pathGroup に対してfill()またはstroke()を呼び出すと、パスがグループキャッシュに再生成されます。

注: パスはペインターのデストラクタで自動的に削除されるため、通常はこのメソッド を呼び出す必要はありません。pathGroup が不要になった場合や、例えばパスのコマンド数が以前より大幅に減少し、バッファサイズを縮小すべき場合など、メモリ使用量を削減するためにのみこのメソッドを使用してください。

関連項目: fill() およびstroke()。

void QCanvasPainter::reset()

現在のペインターの状態をデフォルト値にリセットします。

これには、ストロークおよび塗りつぶしのスタイルと関連するプロパティ、変換行列、クリッピング領域、テキスト関連の設定、合成プロパティ、描画状態スタック、アンチエイリアシング設定が含まれます。

注:この メソッドは、キャンバスバッファを視覚的にクリアしないという点で、HTML Canvas 2D コンテキストの reset() メソッドとは異なります。

注: setWindingEnforce() およびsetHighQualityStroking() の値は 変更されません。

リセット後に描画された、塗りつぶされた黒い正方形と輪郭線のある正方形の上に、回転させた緑色の丸みを帯びた長方形
// Adjust the paint state
p->setStrokeStyle("#00414A");
p->setFillStyle("#2CDE85");
p->setLineWidth(10);
QRectF rect(20, 40, 160, 50);
p->translate(rect.center());
p->rotate(qDegreesToRadians(-25));
p->translate(-rect.center());
p->beginPath();
p->roundRect(rect, 20);
p->fill();
p->stroke();
// Reset to default paint state
p->reset();
p->fillRect(20, 140, 60, 40);
p->strokeRect(120, 140, 60, 40);

save() およびrestore()も参照してください 。

void QCanvasPainter::resetClipping()

クリッピングをリセットし、無効にします。

setClipRect()も参照してください 。

void QCanvasPainter::resetTransform()

現在の変換を単位行列にリセットします。

void QCanvasPainter::restore()

現在のレンダリング状態をポップして復元します。これにより、以前に保存された状態が復元されます。save() が呼び出されておらず、状態スタックが空の場合、これを呼び出しても何もしません。

save()も参照してください 。

void QCanvasPainter::rotate(qreal angle)

現在の座標系をangle だけ時計回りに回転させます。

角度はラジアン単位で指定します。度からラジアンへの変換には、qDegreesToRadians() を使用してください。

45度回転した緑色の丸みを帯びた長方形に、その形状に沿って「Cute!」というテキストが回転して配置されている
QRectF rect(20, 70, 160, 60);
p->translate(rect.center());
p->rotate(-M_PI / 4);
p->translate(-rect.center());
p->beginPath();
p->roundRect(rect, 10);
p->fill();
p->stroke();
p->setFillStyle(QColorConstants::Black);
p->fillText("Cute!", rect);

void QCanvasPainter::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radius)

座標x 、y の位置に、サイズwidth 、height の新しい角丸長方形のサブパスを作成します。角の丸み半径はradius になります。

濃いティール色の輪郭線が入った、緑色の丸みを帯びた四角形
p->beginPath();
p->roundRect(20, 20, 160, 160, 30);
p->fill();
p->stroke();

void QCanvasPainter::roundRect(const QRectF &rect, qreal radius)

rect の位置に、radius の角を持つ新しい角丸長方形のサブパスを作成します。これは、QRectF を使用したオーバーロードされたメソッドです。

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

void QCanvasPainter::roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)

rect で、角が丸い新しい長方形形状のサブパスを作成します。角の丸み具合は、radiusTopLeft 、radiusTopRight 、radiusBottomRight 、radiusBottomLeft のように、角ごとに異なる設定が可能です。

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

void QCanvasPainter::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)

位置x 、y に、サイズwidth 、height の新しい角丸長方形形状のサブパスを作成します。角の丸み具合は、radiusTopLeft 、radiusTopRight 、radiusBottomRight 、radiusBottomLeft のように、角ごとに異なる設定が可能です。

左上の角が鋭角で、半径の異なる3つの丸みを帯びた角を持つ緑色の正方形
p->beginPath();
p->roundRect(20, 20, 160, 160,
             0, 40, 20, 80);
p->fill();
p->stroke();

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

void QCanvasPainter::save()

現在のレンダリング状態をステートスタックにプッシュして保存します。状態を復元するには、対応するrestore()を使用する必要があります。

2つの長方形の輪郭線と、その間にわずかに回転した長方形が挟まれている
p->strokeRect(20, 20, 160, 40);
// Save and adjust the paint state
p->save();
p->setStrokeStyle(QColorConstants::Black);
p->setLineWidth(3);
p->rotate(0.1);
p->strokeRect(20, 80, 180, 20);
// Restore the saved paint state
p->restore();
p->strokeRect(20, 140, 160, 40);

restore()も参照してください 。

void QCanvasPainter::scale(qreal scale)

現在の座標系をscale の倍率で拡大・縮小します。x座標とy座標は均等に拡大・縮小されます。

繰り返し拡大・縮小を行うことで、中心に向かって縮小していく入れ子状の正方形の輪郭
QRectF rect(20, 20, 160, 160);
for (int i = 0; i < 20; i++) {
    p->beginPath();
    p->roundRect(rect, 10);
    p->stroke();
    p->translate(rect.center());
    p->scale(0.8);
    p->translate(-rect.center());
}

void QCanvasPainter::scale(qreal scaleX, qreal scaleY)

現在の座標系を、scaleX およびscaleY によって拡大・縮小します。

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

void QCanvasPainter::setAntialias(qreal antialias)

現在のアンチエイリアシングの量を、ピクセル単位でantialias に設定します。アンチエイリアシングの値が大きいほど、描画は滑らかになります。これは塗りや線の描画にのみ影響し、画像やテキストには影響しません。デフォルト値は1.0 で、最大値は10.0 です。

アンチエイリアシングはパスごとに変更できるため、各ストロークや塗りつぶしの前に設定することができます。アンチエイリアシングを無効にしてレンダリングコストを削減するには、アンチエイリアシングを0 に設定してください。

アンチエイリアシングの強度が高まるにつれて、波状の線の重なりが次第に柔らかくなり、ぼやけていく
p->setLineWidth(6);
for (int i = 1; i < 10 ; i++) {
    int y = i * 20;
    p->setAntialias(i);
    p->beginPath();
    p->moveTo(20, y);
    p->bezierCurveTo(80, y + 20, 120,
                     y - 20, 180, y);
    p->stroke();
}

setTextAntialias()も参照してください 。

void QCanvasPainter::setClipRect(qreal x, qreal y, qreal width, qreal height)

現在のクリッピング矩形を (x,y,width,height) に設定します。クリッピング矩形は、現在のトランスフォームによって変形されます。

注:クリッピングには ある程度のパフォーマンス上のオーバーヘッドがあるため、必要な場合にのみ使用してください。

緑色の四分円と、「Clip me」というテキストが、正方形の領域にクリップされている
QRectF viewArea(20, 20, 160, 160);
p->setClipRect(viewArea);
p->beginPath();
p->circle(40, 40, 110);
p->fill();
p->setFillStyle(Qt::black);
p->fillText("Clip me...", 40, 100);
p->strokeRect(viewArea);

関連項目: resetClipping()。

void QCanvasPainter::setClipRect(const QRectF &rect)

現在のシザー矩形を `rect` に設定します。シザー矩形は、現在のトランスフォームによって変換されます。

注:クリッピングには ある程度のパフォーマンス上のオーバーヘッドがあるため、必要な場合にのみ使用してください。

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

resetClipping()も参照してください 。

[since 6.12] void QCanvasPainter::setFillRule(QCanvasPainter::FillRule fillRule)

パス塗りつぶしルールを `fillRule` に設定します。この値は、ルールが設定された後のすべての `fill()` 呼び出しに適用されます。デフォルトの塗りつぶしルールはQCanvasPainter::FillRule::NonZero

重なり合った2つの緑色の五芒星。1つは中が塗りつぶされており、もう1つは中心が空いている。
auto paintStar = [p]() {
    p->beginPath();
    p->moveTo(120, 60);
    for (int i = 1; i < 6; ++i) {
        p->lineTo(60 + 60 * cos(0.8 * i * M_PI),
                  60 + 60 * sin(0.8 * i * M_PI));
    }
    p->fill();
    p->stroke();
};
p->setFillRule(QCanvasPainter::FillRule::NonZero);
paintStar();
p->translate(75, 75);
p->setFillRule(QCanvasPainter::FillRule::EvenOdd);
paintStar();

この関数は Qt 6.12 で導入されました。

void QCanvasPainter::setFillStyle(QColor color)

塗りつぶしのスタイルをcolor に設定します。デフォルトの塗りつぶしスタイルは、黒一色(0, 0, 0, 1)です。

黒、濃いティール、緑の同心円状の塗りつぶされた正方形
p->setFillStyle(QColorConstants::Black);
p->fillRect(20, 20, 160, 160);
p->setFillStyle(QColor(0, 65, 74));
p->fillRect(40, 40, 120, 120);
p->setFillStyle("#2CDE85");
p->fillRect(60, 60, 80, 80);

void QCanvasPainter::setFillStyle(const QCanvasBrush &brush)

塗りつぶしのスタイルを「brush 」に設定します。デフォルトの塗りつぶしスタイルは、黒の一色塗り(0, 0, 0, 1)です。

縁が濃いティール色へと徐々に色が変わる放射状のグラデーションが塗られた緑色の正方形
QCanvasRadialGradient g2(140, 40, 0, 300);
g2.setStartColor(QColor(44, 222, 133));
g2.setEndColor(QColor(0, 65, 74));
p->setFillStyle(g2);
p->fillRect(20, 20, 160, 160);
g2.setCenterPosition(100, 100);
p->setFillStyle(g2);
p->fillRect(40, 40, 120, 120);

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

void QCanvasPainter::setFont(const QFont &font)

font を現在アクティブなフォントとして設定します。

void QCanvasPainter::setGlobalAlpha(qreal alpha)

グローバルなアルファ(透明度)値をalpha に設定します。このアルファ値は、レンダリングされるすべての図形に適用されます。すでに透明なパスも、比例してさらに透明になります。アルファ値は0.0(完全に透明)から1.0(完全に不透明)の間で指定する必要があります。デフォルトのアルファ値は1.0 です。

緑色のタイル上に配置された4つのQtロゴが、グリッド全体にわたって徐々に完全に透明になっていく
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalAlpha(1.0 - i * 0.3);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setGlobalBrightness(qreal value)

グローバルな明るさをvalue に設定します。この明るさは、レンダリングされるすべての図形に適用されます。値を0に設定すると、描画は完全に黒になります。また、値を1.0より大きく設定することで、明るさを上げることができます。デフォルトの明るさは1.0 です。

グリッド全体にわたり、明るい色からほぼ黒へと濃くなっていく緑色のタイルの上に、4つのQtロゴが描かれている
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalBrightness(1.5 - i * 0.45);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setGlobalCompositeOperation(QCanvasPainter::CompositeOperation operation)

グローバルな合成モードを「operation 」に設定します。このモードは、すべての描画操作に適用されます。デフォルトのモードは「QCanvasPainter::CompositeOperation::SourceOver 」です。

注: コンポジットモードを正しく機能させるには 、alphaBlending を有効にし、キャンバスの背景を透明にする必要があります。

QList<QCanvasPainter::CompositeOperation> modes = {
    QCanvasPainter::CompositeOperation::SourceOver,
    QCanvasPainter::CompositeOperation::SourceAtop,
    QCanvasPainter::CompositeOperation::DestinationOut
};
for (int i = 0; i < modes.size(); i++) {
    // First item - SourceOver mode
    p->setGlobalCompositeOperation(QCanvasPainter::CompositeOperation::SourceOver);
    qreal y = 5 + i * 65;
    p->setFillStyle("#D9F720");
    p->fillRect(20, y, 140, 40);
    // Second item - Different modes
    p->setGlobalCompositeOperation(modes[i]);
    p->beginPath();
    p->ellipse(130, y + 30, 60, 25);
    p->setStrokeStyle("#00414A");
    p->setFillStyle("#2CDE85");
    p->fill();
    p->stroke();
}

void QCanvasPainter::setGlobalContrast(qreal value)

グローバルなコントラストをvalue に設定します。このコントラストは、レンダリングされるすべての図形に適用されます。値を0に設定すると、描画結果は完全に灰色(0.5, 0.5, 0.5)になります。コントラストを高めるために、値を1.0より大きくすることも可能です。デフォルトでは、コントラストは1.0 に設定されています。

緑色のタイルに描かれた4つのQtロゴ。コントラストが強いものから、色あせたグレーのものまでさまざま
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalContrast(1.5 - i * 0.45);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setGlobalSaturation(qreal value)

グローバルな彩度をvalue に設定します。この彩度は、レンダリングされるすべての図形に適用されます。値を0にすると彩度が無効になり、描画は完全にグレースケールになります。彩度を高めるために、値を1.0より大きくすることもできます。デフォルトの彩度は1.0 です。

グリッド全体にわたり、鮮やかな色からグレースケールへと徐々に色あせていく、緑色のタイルに描かれた4つのQtロゴ
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalSaturation(1.5 - i * 0.5);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setHighQualityStroking(bool enabled)

高品質なストロークをenabled に設定します。これをtrue に設定すると、ストロークが重なり合い、不透明度が完全ではないといった、あまり一般的ではないケースにおいて、より正確なレンダリングが行われます。これを有効にすると、レンダリングコストが高くなります。デフォルト値はfalse です。

// Increase the line width and reduce opacity to get
// the stroking flaws visible.
p->setLineWidth(20);
p->setGlobalAlpha(0.5);
if (m_path.isEmpty()) {
    m_path.moveTo(30, 30);
    m_path.lineTo(40, 30);
    m_path.lineTo(80, 170);
    m_path.lineTo(80, 30);
    m_path.lineTo(70, 30);
}
p->setHighQualityStroking(true);
p->stroke(m_path);
p->setHighQualityStroking(false);
p->translate(90, 0);
p->stroke(m_path);

void QCanvasPainter::setLineCap(QCanvasPainter::LineCap cap)

ストロークの線の終端を「cap 」に設定します。デフォルトの線の端は「QCanvasPainter::LineCap::Butt 」です。

突き合わせ、角型、丸型のラインキャップを示す3本の水平線
QCanvasPath path;
path.moveTo(40, 60);
path.lineTo(160, 60);
p->setLineCap(QCanvasPainter::LineCap::Butt);
p->stroke(path, -1);
p->setLineCap(QCanvasPainter::LineCap::Square);
p->translate(0, 40);
p->stroke(path, -1);
p->setLineCap(QCanvasPainter::LineCap::Round);
p->translate(0, 40);
p->stroke(path, -1);

void QCanvasPainter::setLineJoin(QCanvasPainter::LineJoin join)

ストロークの線接合を「join 」に設定します。デフォルトの線接合は「QCanvasPainter::LineJoin::Miter 」です。

マイター接ぎ、ベベル接ぎ、ラウンド接ぎを示す3つのジグザグの経路
QCanvasPath path;
path.moveTo(40, 20);
path.lineTo(100, 80);
path.lineTo(160, 40);
path.lineTo(160, 70);
p->setLineJoin(QCanvasPainter::LineJoin::Miter);
p->stroke(path, -1);
p->setLineJoin(QCanvasPainter::LineJoin::Bevel);
p->translate(0, 50);
p->stroke(path, -1);
p->setLineJoin(QCanvasPainter::LineJoin::Round);
p->translate(0, 50);
p->stroke(path, -1);

setMiterLimit()も参照してください 。

void QCanvasPainter::setLineWidth(qreal width)

ストロークの線幅をwidth ピクセルに設定します。デフォルトの線幅は1.0 です。アンチエイリアシングが有効になっている場合、1ピクセルより細い線幅では不透明度が自動的にフェードされ、滑らかな出力が得られます。

線の太さが徐々に太くなるように描かれた、波状の曲線の積み重ね
for (int i = 1; i < 10 ; i++) {
    int y = i * 20;
    p->setLineWidth(0.5 * i);
    p->beginPath();
    p->moveTo(20, y);
    p->bezierCurveTo(80, y + 20, 120,
                     y - 20, 180, y);
    p->stroke();
}

stroke()も参照してください 。

void QCanvasPainter::setMiterLimit(qreal limit)

マイター制限をlimit に設定します。マイター制限は、鋭角な角がいつ面取りされるかを制御します。角の長さがこの制限値を超える場合、代わりに線と線の間にQCanvasPainter::LineJoin::Bevel が適用されます。これは、QCanvasPainter::LineJoin::Miter の線接続方式でのみ有効です。デフォルトの制限値は10.0 です。

QCanvasPath path;
path.moveTo(20, 40);
path.lineTo(30, 130);
path.lineTo(40, 40);
path.lineTo(55, 80);

p->setLineJoin(QCanvasPainter::LineJoin::Miter);
p->setMiterLimit(20);
p->stroke(path);

p->setMiterLimit(8);
p->translate(65, 0);
p->stroke(path);

p->setMiterLimit(2);
p->translate(65, 0);
p->stroke(path);

setLineJoin()も参照してください 。

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

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

緑色の丸みを帯びた正方形で、小さな円と長方形が穴としてくり抜かれている
p->beginPath();
p->roundRect(20, 20, 160, 160, 40);
p->setPathWinding(QCanvasPainter::PathWinding::ClockWise);
p->circle(140, 60, 20);
p->rect(60, 120, 80, 30);
p->fill();
p->stroke();

beginHoleSubPath() およびbeginSolidSubPath()も参照してください 。

void QCanvasPainter::setStrokeStyle(QColor color)

ストロークのスタイルをcolor の塗りつぶしに設定します。デフォルトのストロークスタイルは、黒(0, 0, 0, 1)の塗りつぶしです。

黒、濃いティール、緑の3つの入れ子になった正方形の輪郭
p->setStrokeStyle(QColorConstants::Black);
p->strokeRect(20, 20, 160, 160);
p->setStrokeStyle(QColor(0, 65, 74));
p->strokeRect(40, 40, 120, 120);
p->setStrokeStyle("#2CDE85");
p->strokeRect(60, 60, 80, 80);

void QCanvasPainter::setStrokeStyle(const QCanvasBrush &brush)

ストロークのスタイルをbrush に設定します。デフォルトのストロークスタイルは、黒の実線 (0, 0, 0, 1) です。

緑から黒、および緑から黄色への斜めのグラデーションが施された、2つの入れ子になった正方形の輪郭
QCanvasLinearGradient g1(180, 20, 20, 180);
g1.setStartColor(QColor(44, 222, 133));
g1.setEndColor(Qt::black);
p->setStrokeStyle(g1);
p->strokeRect(20, 20, 160, 160);
g1.setEndColor(Qt::yellow);
p->setStrokeStyle(g1);
p->strokeRect(40, 40, 120, 120);

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

void QCanvasPainter::setTextAlign(QCanvasPainter::TextAlign align)

テキストの水平方向の配置をalign に設定します。デフォルトの配置はQCanvasPainter::TextAlign::Start です。

「左」、「中央」、「右」、「開始」、「終了」というラベルが、垂直基準線の周囲に配置されている
QFont font("Titillium Web", 22);
p->setFont(font);
p->fillRect(100, 0, 1, 200);
p->setTextAlign(QCanvasPainter::TextAlign::Left);
p->fillText("Left", 100, 40);
p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->fillText("Center", 100, 70);
p->setTextAlign(QCanvasPainter::TextAlign::Right);
p->fillText("Right", 100, 100);
p->setTextAlign(QCanvasPainter::TextAlign::Start);
p->fillText("Start", 100, 130);
p->setTextAlign(QCanvasPainter::TextAlign::End);
p->fillText("End", 100, 160);

setTextBaseline()も参照してください 。

void QCanvasPainter::setTextAntialias(qreal antialias)

現在のテキストのアンチエイリアシング量を設定します。値「antialias 」は通常のアンチエイリアシングに対する倍率を表しており、つまり「0.0 」はアンチエイリアシングを無効にし、「2.0」はアンチエイリアシング効果を2倍にします。デフォルト値は1.0です。

注: 使用されているテキストアンチエイリアシング技術(SDF)の性質上 、アンチエイリアシングの最大量はかなり制限されており、フォントサイズが小さいほどその影響は小さくなります。

「アンチエイリアシング 1.0」から「4.0」とラベル付けされた線は、徐々に柔らかくなり、ぼやけていく
QFont font("Titillium Web", 20);
p->setFont(font);
p->setTextAntialias(1.0);
p->fillText("Antialiasing: 1.0", 100, 25);
p->setTextAntialias(2.0);
p->fillText("Antialiasing: 2.0", 100, 75);
p->setTextAntialias(3.0);
p->fillText("Antialiasing: 3.0", 100, 125);
p->setTextAntialias(4.0);
p->fillText("Antialiasing: 4.0", 100, 175);

void QCanvasPainter::setTextBaseline(QCanvasPainter::TextBaseline baseline)

テキストの垂直方向の配置(ベースライン)をbaseline に設定します。デフォルトの配置はQCanvasPainter::TextBaseline::Alphabetic です。

ラベル「下」「中」「上」「アルファベット順」「吊り下げ」を水平ベースラインに合わせて配置
QFont font("Titillium Web", 16);
p->setFont(font);
p->fillRect(0, 60, 200, 1);
p->fillRect(0, 140, 200, 1);
p->setTextBaseline(QCanvasPainter::TextBaseline::Bottom);
p->fillText("Bottom", 40, 60);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
p->fillText("Middle", 100, 60);
p->setTextBaseline(QCanvasPainter::TextBaseline::Top);
p->fillText("Top", 160, 60);
p->setTextBaseline(QCanvasPainter::TextBaseline::Alphabetic);
p->fillText("Alphabetic", 50, 140);
p->setTextBaseline(QCanvasPainter::TextBaseline::Hanging);
p->fillText("Hanging", 150, 140);

setTextAlign()も参照してください 。

void QCanvasPainter::setTextDirection(QCanvasPainter::TextDirection direction)

テキストの方向をdirection に設定します。デフォルトの方向はQCanvasPainter::TextDirection::Inherit です。

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QFont font("Titillium Web", 32);
p->setFont(font);
p->setFillStyle(QColorConstants::Black);
p->fillText("Hi!", 100, 50);
p->setTextDirection(QCanvasPainter::TextDirection::RightToLeft);
p->fillText("Hi!", 100, 150);

void QCanvasPainter::setTextLineHeight(qreal height)

改行されるテキストの行高さを、ピクセル単位でheight に設定します。デフォルトの行高さは0 です。

3つのボックスに配置された2行のテキストで、行高がそれぞれ-10、0、10ピクセルとなっている
QRectF r1(40, 5, 120, 60);
QRectF r2(40, 70, 120, 60);
QRectF r3(40, 135, 120, 60);
p->strokeRect(r1);
p->strokeRect(r2);
p->strokeRect(r3);
p->setTextLineHeight(-10);
p->fillText("Text with line height: -10", r1);
p->setTextLineHeight(0);
p->fillText("Text with line height: 0", r2);
p->setTextLineHeight(10);
p->fillText("Text with line height: 10", r3);

void QCanvasPainter::setTextWrapMode(QCanvasPainter::WrapMode wrapMode)

テキストの折り返しモードを「wrapMode 」に設定します。デフォルトの折り返しモードは「QCanvasPainter::WrapMode::NoWrap 」です。

「折り返しなし」、「単語単位の折り返し」、「どこでも折り返し」の3つのチェックボックスで、同じ文字列が表示されています
QRectF r1(50, 5, 100, 60);
QRectF r2(50, 70, 100, 60);
QRectF r3(50, 135, 100, 60);
p->strokeRect(r1);
p->strokeRect(r2);
p->strokeRect(r3);
QString s("This is a long string.");
p->setTextWrapMode(QCanvasPainter::WrapMode::NoWrap);
p->fillText(s, r1);
p->setTextWrapMode(QCanvasPainter::WrapMode::Wrap);
p->fillText(s, r2);
p->setTextWrapMode(QCanvasPainter::WrapMode::WrapAnywhere);
p->fillText(s, r3);

void QCanvasPainter::setTransform(const QTransform &transform)

現在の変換をリセットし、代わりにtransform を使用します。

大きな、回転・拡大された角丸四角形の上にある、小さな角丸四角形
p->beginPath();
p->roundRect(80, 20, 40, 40, 10);
p->fill();
p->stroke();
QTransform t;
t.translate(100, 20);
t.rotate(45);
t.scale(2.0, 2.0);
p->setTransform(t);
p->beginPath();
p->roundRect(20, 20, 40, 40, 10);
p->fill();
p->stroke();

transform()も参照してください 。

void QCanvasPainter::setWindingEnforce(bool enabled)

ワインディングの強制設定をenabled に設定します。これをfalse に設定すると、setPathWinding()で設定された内容に合わせてパスのワインディングを強制する機能が無効になります。この機能を無効にすると、例えば、点を時計回りの順序で追加することでパスに穴を開けることが可能になります。また、無効にすることでパフォーマンスが向上する場合もあります。デフォルト値はtrue です。

p->setWindingEnforce(false);
p->beginPath();
// Outer shape, counterclockwise
p->moveTo(20, 20);
p->lineTo(100, 180);
p->lineTo(180, 20);
p->closePath();
// Inner shape, clockwise
p->moveTo(100, 40);
p->lineTo(125, 90);
p->lineTo(75, 90);
p->closePath();
p->fill();
p->stroke();

void QCanvasPainter::skew(qreal angleX, qreal angleY = 0.0)

現在の座標系を、X軸方向にangleX 、Y軸方向にangleY だけ傾斜(せん断)させます。角度はラジアン単位で指定します。

「Cute!」というテキストが入った緑色の丸みを帯びた長方形が、ひし形に歪められている
QRectF rect(40, 70, 120, 60);
p->translate(rect.center());
p->skew(-0.6);
p->translate(-rect.center());
p->beginPath();
p->roundRect(rect, 10);
p->fill();
p->stroke();
p->setFillStyle(QColorConstants::Black);
p->fillText("Cute!", rect);

void QCanvasPainter::stroke()

現在のストロークスタイルで、現在のパスを描画します。

2本の縦棒の輪郭線と、それらと重なっている円の輪郭線
p->beginPath();
p->rect(20, 20, 40, 160);
p->rect(140, 20, 40, 160);
p->circle(100, 100, 60);
p->stroke();

setStrokeStyle()も参照してください 。

void QCanvasPainter::stroke(const QCanvasPath &path, int pathGroup = -1)

path に対して、現在の描画スタイルで描画を行い、pathGroup に格納します。QCanvasPath による描画は、パスに含まれるコマンドが多く、かつその大部分が静的な場合に最適です。

pathGroup が-1 の場合、パスのレンダリング関連データはキャッシュされません。これがデフォルトの設定です。パスデータのキャッシュを要求するには、0 以上の値を指定してください。パスキャッシュグループの使用に関する詳細については、QCanvasPath のドキュメントを参照してください。

このメソッドを呼び出す前にbeginPath() を呼び出す必要はありません。

高さの異なる細い縦棒の輪郭が並んでいる
// m_path is QCanvasPath
if (m_path.isEmpty()) {
    for (int i = 0; i < 16; i++) {
        int h = 100 + 60 * sin(i);
        m_path.rect(22 + i * 10,
                    180 - h,
                    6, h);
    }
}
p->stroke(m_path);

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

setStrokeStyle() およびremovePathGroup()も参照してください 。

void QCanvasPainter::strokeRect(qreal x, qreal y, qreal width, qreal height)

指定された位置(x 、y )に、サイズwidth 、height の線画付き矩形を描画します。

注:これは 利便性を考慮して提供されています。複数の矩形にストロークを適用する場合は、rect() を使用することを推奨します。

ダークティール色の四角いアウトライン
p->strokeRect(20, 20, 160, 160);
// The above code does same as:
// p->beginPath();
// p->rect(20, 20, 160, 160);
// p->stroke();

void QCanvasPainter::strokeRect(const QRectF &rect)

rect に線画の矩形を描画します。これは、QRectF を使用したオーバーロードされたメソッドです。

注:これは 利便性のために提供されています。複数の矩形にストロークを適用する場合は、rect() を使用することを推奨します。

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

QRectF QCanvasPainter::textBoundingBox(const QString &text, qreal x, qreal y, qreal maxWidth = 0) const

(x,y) における `text ` 文字列のバウンディングボックスを測定します。

複数行のテキストを測定するには、setTextWrapMode() を使用して、テキストの折り返しモードをデフォルトの `NoWrap` 以外の値に設定してください。また、オプションの `maxWidth ` パラメータを、希望する行幅(ピクセル単位)に設定してください。

QRectF を [xmin, ymin, width, height] の値で返します。測定値はローカル座標系で返されます。

「Text Built with Qt」というテキストを、1行で表示したり、2行に折り返したりし、それぞれを測定された境界ボックス内に収めています。
QString s("Built with Qt");
QPointF pos1(20, 20);
QRectF box1 = p->textBoundingBox(s, pos1);
p->strokeRect(box1);
p->fillText(s, pos1);
p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap);
p->setTextAlign(QCanvasPainter::TextAlign::Center);
QPointF pos2(100, 80);
QRectF box2 = p->textBoundingBox(s, pos2, 100);
p->strokeRect(box2);
p->fillText(s, pos2, 100);

QRectF QCanvasPainter::textBoundingBox(const QString &text, const QRectF &rect) const

rect にある `text ` 文字列のバウンディングボックスを測定します。値 [xmin, ymin, width, height] を含む `QRectF ` を返します。測定値はローカル座標系で返されます。

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

QRectF QCanvasPainter::textBoundingBox(const QString &text, QPointF point, qreal maxWidth = 0) const

point にある「text 」文字列のバウンディングボックスを測定します。

複数行のテキストを測定するには、setTextWrapMode() を使用して、テキストの折り返しモードをデフォルトのNoWrap 以外の値に設定してください。また、オプションのmaxWidth パラメータを、希望する行幅(ピクセル単位)に設定してください。

QRectF を、値 [xmin, ymin, width, height] として返します。測定値はローカル座標系で返されます。

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

void QCanvasPainter::transform(const QTransform &transform)

現在の座標系に、指定されたtransform を乗算します。

中心を軸に繰り返し回転させ、環状に配置された10本の緑色の丸みを帯びた棒
QTransform t;
t.translate(100, 100);
t.rotate(36);
t.translate(-100, -100);
for (int i = 0; i < 10; i++) {
    p->transform(t);
    p->beginPath();
    p->roundRect(80, 15, 40, 20, 10);
    p->fill();
    p->stroke();
}

setTransform()も参照してください 。

void QCanvasPainter::translate(qreal x, qreal y)

現在の座標系を、x およびy によって変換します。

2つのまったく同じ緑色の丸みを帯びた長方形があり、下のものは平行移動によって下方にずれている
auto paintRect = [p]() {
    p->beginPath();
    p->roundRect(20, 20, 160, 60, 10);
    p->fill();
    p->stroke();
};
paintRect();
p->translate(0, 100);
paintRect();

void QCanvasPainter::translate(QPointF point)

現在の座標系をpoint だけ並進させます。

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

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