このページでは

QPaintEngine Class

QPaintEngine クラスは、QPainter が特定のプラットフォーム上の特定のデバイスに描画を行う仕組みについて、抽象的な定義を提供します。詳細...

ヘッダー: #include <QPaintEngine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

パブリック型

enum DirtyFlag { DirtyPen, DirtyBrush, DirtyBrushOrigin, DirtyFont, DirtyBackground, …, AllDirty }
flags DirtyFlags
enum PaintEngineFeature { AlphaBlend, Antialiasing, BlendModes, BrushStroke, ConicalGradientFill, …, AllFeatures }
flags PaintEngineFeatures
enum PolygonDrawMode { OddEvenMode, WindingMode, ConvexMode, PolylineMode }
enum Type { X11, Windows, MacPrinter, CoreGraphics, QuickDraw, …, Direct2D }

パブリック関数

QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())
virtual ~QPaintEngine()
virtual bool begin(QPaintDevice *pdev) = 0
virtual void drawEllipse(const QRectF &rect)
virtual void drawEllipse(const QRect &rect)
virtual void drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)
virtual void drawLines(const QLineF *lines, int lineCount)
virtual void drawLines(const QLine *lines, int lineCount)
virtual void drawPath(const QPainterPath &path)
virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0
virtual void drawPoints(const QPoint *points, int pointCount)
virtual void drawPoints(const QPointF *points, int pointCount)
virtual void drawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
virtual void drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
virtual void drawRects(const QRectF *rects, int rectCount)
virtual void drawRects(const QRect *rects, int rectCount)
virtual void drawTextItem(const QPointF &p, const QTextItem &textItem)
virtual void drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)
virtual bool end() = 0
bool hasFeature(QPaintEngine::PaintEngineFeatures feature) const
bool isActive() const
QPaintDevice *paintDevice() const
QPainter *painter() const
void setActive(bool state)
virtual QPaintEngine::Type type() const = 0
virtual void updateState(const QPaintEngineState &state) = 0

詳細な説明

Qt は、サポートされているさまざまなペインタバックエンド向けに、QPaintEngine の既製の実装をいくつか提供しています。提供されている主なペイントエンジンはラスタペイントエンジンであり、これには、サポートされているすべてのプラットフォームで全機能セットをサポートするソフトウェアラスタライザが含まれています。 これは、たとえば Windows、X11、macOS における `QWidget` ベースのクラスでの描画のデフォルトであり、`QImage ` での描画のバックエンドであり、特定の機能をサポートしていないペイントエンジンのフォールバックとしても使用されます。 さらに、OpenGL用(QOpenGLWidget を通じてアクセス可能)および印刷用(QPainter を使用してQPrinter オブジェクト上に描画可能)の QPaintEngine 実装も提供しています。

QPainter を使用して別のバックエンドに描画したい場合は、QPaintEngineをサブクラス化し、そのすべての仮想関数を再実装する必要があります。その後、QPaintDevice をサブクラス化し、仮想関数QPaintDevice::paintEngine()を再実装することで、QPaintEngineの実装を利用可能にします。

QPaintEngine は、それを生成したQPaintDevice によって生成され、管理されます。

QPainter 、QPaintDevice::paintEngine()、およびペイントシステムも参照してください 。

メンバ型のドキュメント

enum QPaintEngine::DirtyFlag
flags QPaintEngine::DirtyFlags

定数値説明
QPaintEngine::DirtyPen0x0001ペンが汚れているため、更新する必要があります。
QPaintEngine::DirtyBrush0x0002ブラシが汚れているため、更新する必要があります。
QPaintEngine::DirtyBrushOrigin0x0004ブラシの原点が汚れているため、更新する必要があります。
QPaintEngine::DirtyFont0x0008フォントが汚れており、更新が必要です。
QPaintEngine::DirtyBackground0x0010背景が汚れているため、更新する必要があります。
QPaintEngine::DirtyBackgroundMode0x0020背景モードが汚れており、更新する必要があります。
QPaintEngine::DirtyTransform0x0040トランスフォームが変更されたため、更新する必要があります。
QPaintEngine::DirtyClipRegion0x0080クリップ領域が変更済みであるため、更新する必要があります。
QPaintEngine::DirtyClipPath0x0100クリップパスが変更されたため、更新が必要です。
QPaintEngine::DirtyHints0x0200レンダリングヒントが変更済みであるため、更新する必要があります。
QPaintEngine::DirtyCompositionMode0x0400コンポジションモードが変更されたため、更新が必要です。
QPaintEngine::DirtyClipEnabled0x0800クリッピングの有効/無効の状態が変更されており、更新が必要です。
QPaintEngine::DirtyOpacity0x1000不透明度の定数が変更されたため、QPaintEngine::updateState() での状態変更の一環として更新する必要があります。
QPaintEngine::AllDirty0xffff内部で使用される便利な列挙型。

これらの型は、QPainter によって、QPaintEngine::updateState() を使用してQPaintEngine 内のさまざまな状態の遅延更新をトリガーするために使用されます。

ペイントエンジンは、すべてのダーティ状態を更新する必要があります。

DirtyFlags 型は、QFlags<DirtyFlag> の typedef です。これは、DirtyFlag 値の OR 結合を格納します。

enum QPaintEngine::PaintEngineFeature
flags QPaintEngine::PaintEngineFeatures

この列挙型は、ペイントエンジンが持つ機能や性能を記述するために使用されます。エンジンが特定の機能をサポートしていない場合、QPainter は他の手段を用いてその機能を可能な限りエミュレートし、エミュレートされた結果を含むアルファブレンドされたQImage をエンジンに渡します。ただし、AlphaBlendやPorterDuffなど、エミュレートできない機能もあります。

定数値説明
QPaintEngine::AlphaBlend0x00000080エンジンはプリミティブのアルファブレンディングを行うことができます。
QPaintEngine::Antialiasing0x00000400エンジンは、アンチエイリアシングを使用して、レンダリングされたプリミティブの外観を改善できます。
QPaintEngine::BlendModes0x00008000このエンジンは、ブレンディングモードをサポートしています。
QPaintEngine::BrushStroke0x00000800このエンジンは、単色だけでなく、ブラシを塗りつぶしとして含むストロークの描画もサポートしています(例:幅 2 の点線グラデーション)。
QPaintEngine::ConicalGradientFill0x00000040このエンジンは、円錐グラデーションの塗りつぶしをサポートしています。
QPaintEngine::ConstantOpacity0x00001000このエンジンは、QPainter::setOpacity() が提供する機能をサポートしています。
QPaintEngine::LinearGradientFill0x00000010このエンジンは、線形グラデーションの塗りつぶしをサポートしています。
QPaintEngine::MaskedBrush0x00002000このエンジンは、アルファチャンネルまたはマスクを持つテクスチャを持つブラシをレンダリングすることができます。
QPaintEngine::ObjectBoundingModeGradients0x00010000このエンジンは、座標モードQGradient::ObjectBoundingMode のグラデーションをネイティブでサポートしています。それ以外の場合、QPaintEngine::PatternTransform がサポートされていると、オブジェクト境界モードのグラデーションは、座標モードQGradient::LogicalMode のグラデーションに変換され、座標マッピングにはブラシ変換が適用されます。
QPaintEngine::PainterPaths0x00000200このエンジンはパスをサポートしています。
QPaintEngine::PaintOutsidePaintEvent0x20000000このエンジンは、ペイントイベント以外での描画が可能です。
QPaintEngine::PatternBrush0x00000008このエンジンは、Qt::BrushStyle で指定されたブラシパターンを持つブラシをレンダリングすることができます。
QPaintEngine::PatternTransform0x00000002このエンジンは、ブラシパターンの変形をサポートしています。
QPaintEngine::PerspectiveTransform0x00004000このエンジンは、プリミティブに対する遠近法変換を実行する機能を備えています。
QPaintEngine::PixmapTransform0x00000004このエンジンは、回転やシアを含むピクマップの変形を行うことができます。
QPaintEngine::PorterDuff0x00000100このエンジンは、Porter-Duff 演算をサポートしています。
QPaintEngine::PrimitiveTransform0x00000001このエンジンは、描画プリミティブの変形をサポートしています。このエンジンは、ラジアルグラデーションの塗りつぶしをサポートしています。
QPaintEngine::RadialGradientFill0x00000020このエンジンは、放射状のグラデーション塗りつぶしをサポートしています。
QPaintEngine::RasterOpModes0x00020000このエンジンは、ビット単位のラスタ演算をサポートしています。
QPaintEngine::AllFeatures0xffffffff上記のすべての機能。この列挙型値は通常、ビットマスクとして使用されます。

PaintEngineFeatures 型は、QFlags<PaintEngineFeature> の typedef です。これは、PaintEngineFeature 値の論理和(OR)を格納します。

enum QPaintEngine::PolygonDrawMode

定数値説明
QPaintEngine::OddEvenMode0ポリゴンは「OddEven」塗りつぶしルールを使用して描画する必要があります。
QPaintEngine::WindingMode1多角線は「Winding」塗りつぶしルールを使用して描画される必要があります。
QPaintEngine::ConvexMode2多角形は凸多角形であり、利用可能な場合は専用のアルゴリズムを使用して描画される。
QPaintEngine::PolylineMode3ポリゴンの輪郭線のみを描画する必要があります。

enum QPaintEngine::Type

定数値説明
QPaintEngine::X110 
QPaintEngine::Windows1 
QPaintEngine::MacPrinter4 
QPaintEngine::CoreGraphics3macOSのQuartz2D (CoreGraphics)
QPaintEngine::QuickDraw2macOSのQuickDraw
QPaintEngine::QWindowSystem5組み込みLinux向けQt
QPaintEngine::OpenGL6 
QPaintEngine::Picture7QPicture フォーマット
QPaintEngine::SVG8スケーラブル・ベクター・グラフィックス(SVG)XML形式
QPaintEngine::Raster9 
QPaintEngine::Direct3D10Windows専用、Direct3Dベースのエンジン
QPaintEngine::Pdf11ポータブル・ドキュメント・フォーマット
QPaintEngine::OpenVG12 
QPaintEngine::User50最初のユーザータイプID
QPaintEngine::MaxUser100最後のユーザータイプ ID
QPaintEngine::OpenGL213 
QPaintEngine::PaintBuffer14 
QPaintEngine::Blitter15 
QPaintEngine::Direct2D16Windows専用、Direct2Dベースのエンジン

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

[explicit] QPaintEngine::QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())

caps で指定された機能セットを持つペイントエンジンを作成します。

[virtual noexcept] QPaintEngine::~QPaintEngine()

ペイントエンジンを破壊します。

[pure virtual] bool QPaintEngine::begin(QPaintDevice *pdev)

この関数を再実装して、描画デバイス `pdev` での描画が開始される際に、描画エンジンを初期化してください。初期化が成功した場合は `true` を返し、失敗した場合は `false` を返してください。

end() およびisActive()も参照してください 。

[virtual] void QPaintEngine::drawEllipse(const QRectF &rect)

この関数を再実装し、矩形rect 内に収まる最大の楕円を描画してください。

デフォルトの実装では、drawPolygon() が呼び出されます。

[virtual] void QPaintEngine::drawEllipse(const QRect &rect)

この関数のデフォルトの実装では、この関数の浮動小数点版が呼び出されます

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

[virtual] void QPaintEngine::drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)

image この関数を再実装し、指定された変換フラグflags を使用して、指定されたrectangle 内で、sr で指定された矩形範囲を描画し、それをピクマップに変換するようにしてください。

[virtual] void QPaintEngine::drawLines(const QLineF *lines, int lineCount)

デフォルトの実装では、lines 内の行のリストを、ペイントエンジンの機能セットに応じて、drawPath()またはdrawPolygon()へのlineCount 個の個別の呼び出しに分割します。

[virtual] void QPaintEngine::drawLines(const QLine *lines, int lineCount)

デフォルトの実装では、lines の最初のlineCount 行をQLineF に変換し、この関数の浮動小数点版を呼び出します。

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

[virtual] void QPaintEngine::drawPath(const QPainterPath &path)

デフォルトの実装では、path を無視し、何もしません。

[pure virtual] void QPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)

この関数を再実装して、指定された `r` 上で、`sr ` で指定された矩形範囲の `pm ` の一部を描画するようにしてください。

[virtual] void QPaintEngine::drawPoints(const QPoint *points, int pointCount)

バッファ内の最初のpointCount 個の点を描画しますpoints

デフォルトの実装では、points 内の最初のpointCount 個の QPoint を QPointF に変換し、浮動小数点版の drawPoints を呼び出します。

[virtual] void QPaintEngine::drawPoints(const QPointF *points, int pointCount)

バッファに最初のpointCount 個の点を描画しますpoints

[virtual] void QPaintEngine::drawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode)

この仮想関数を再実装し、`pointCount ` で定義された多角形を、`points` の最初の点を使用し、モード `mode` で描画するようにしてください。

注: drawPolygon() 関数のうち、少なくとも1つは 再実装する必要があります。

[virtual] void QPaintEngine::drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode)

この仮想関数を再実装し、pointCount で定義された多角形を、points で指定された最初の点に基づき、モードmode を使用して描画するようにしてください。

注: drawPolygon() 関数のうち、少なくとも1つは 再実装する必要があります。

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

[virtual] void QPaintEngine::drawRects(const QRectF *rects, int rectCount)

バッファ `rects` に、最初の `rectCount ` 矩形を描画します。この関数のデフォルトの実装では、ペイントエンジンの機能セットに応じて、`drawPath()` または `drawPolygon()` を呼び出します。

[virtual] void QPaintEngine::drawRects(const QRect *rects, int rectCount)

デフォルトの実装では、バッファ `rects ` 内の最初の `rectCount ` 個の矩形を `QRectF ` に変換し、この関数の浮動小数点版を呼び出します。

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

[virtual] void QPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)

この関数は、位置p にテキスト項目textItem を描画します。この関数のデフォルトの実装では、テキストをQPainterPath に変換し、その結果得られたパスを描画します。

[virtual] void QPaintEngine::drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)

この関数を再実装し、指定されたrect 上に、指定されたp から開始してpixmap を描画するようにしてください。rect が塗りつぶされるまで、ピクマップへの描画が繰り返し行われます。

[pure virtual] bool QPaintEngine::end()

この関数を再実装して、現在の描画デバイスへの描画を完了させてください。描画が正常に完了した場合は true を返し、そうでない場合は false を返してください。

begin() およびisActive()も参照してください 。

bool QPaintEngine::hasFeature(QPaintEngine::PaintEngineFeatures feature) const

ペイントエンジンが指定されたfeature をサポートしている場合はtrue を返し、そうでない場合はfalse を返します。

bool QPaintEngine::isActive() const

ペイントエンジンが現在描画を行っている場合は `true ` を返し、そうでない場合は `false` を返します。

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

QPaintDevice *QPaintEngine::paintDevice() const

描画がアクティブな場合、このエンジンが描画を行っているデバイスを返します。そうでない場合は、nullptr を返します。

QPainter *QPaintEngine::painter() const

ペイントエンジンのペインターを返します。

void QPaintEngine::setActive(bool state)

ペイントエンジンのアクティブ状態を「state 」に設定します。

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

[pure virtual] QPaintEngine::Type QPaintEngine::type() const

この関数を再実装し、ペイントエンジン `Type` を返すようにしてください。

[pure virtual] void QPaintEngine::updateState(const QPaintEngineState &state)

ペイントエンジンの状態を更新するために、この関数を再実装してください。

実装された場合、この関数は、ペイントエンジンの現在のstate をチェックし、変更されたプロパティを更新する役割を担います。QPaintEngineState::state()関数を使用して、更新が必要なプロパティを特定し、対応するget function を使用して、指定されたプロパティの現在の値を取得してください。

QPaintEngineStateも参照してください 。

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