Auf dieser Seite

QCanvasPainter Class

Die Klasse „QCanvasPainter“ führt hardwarebeschleunigtes Zeichnen auf QRhi durch. Mehr...

Überschrift: #include <QCanvasPainter>
CMake: find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter)
Seit: Qt 6.11

Öffentliche Typen

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 }

Öffentliche Funktionen

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)

Ausführliche Beschreibung

Qt Canvas Painter (QCanvasPainter) stellt eine für hardwarebeschleunigtes (GPU) Zeichnen optimierte API bereit. Die API orientiert sich eng an der HTML-Canvas-2D-Context-Spezifikation, die auf Qt C++ portiert wurde. Sie ist zudem von QPainter beeinflusst, verfügt jedoch über eine kompaktere API.

Hier ist ein einfaches Beispiel für die Verwendung von QCanvasPainter zum Erstellen einer runden Schaltfläche.

Gelber, runder Button mit der Aufschrift „CLICK!“ und einem sanften Schlagschatten
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);

Hier ist ein weiteres Beispiel für das Zeichnen eines einfachen Diagramms.

Schattierte S-Kurve, die von Grün nach Rot über ein dunkles Raster mit weißen Achsen verläuft
// 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();

Funktionen

Im Großen und Ganzen und hinsichtlich der Namensgebung orientiert sich QCanvasPainter am HTML-Canvas-2D-Kontext (https://html.spec.whatwg.org/multipage/canvas.html#2dcontext). Dadurch ist die API für viele Entwickler vertraut und ermöglicht die einfache Wiederverwendung von bestehendem Canvas-Code. Das Ziel ist jedoch NICHT, zu 100 % mit dem HTML-Canvas kompatibel zu sein. QCanvasPainter verzichtet auf einige Funktionen, um die Handhabung zu vereinfachen, die Leistung auf der hardwarebeschleunigten Grafik-API „ QRhi “ zu steigern und modernen UI-Anforderungen besser gerecht zu werden. Aus diesen Gründen verfügt QCanvasPainter im Vergleich zum HTML-Canvas-2D-Kontext auch über zusätzliche Funktionen.

Hier sind einige der Funktionen, die im Vergleich zu HTML-Canvas zumindest derzeit noch fehlen:

  • Clipping: Alle Clipping-Bereiche sind (transformierte) Rechtecke, und das Clipping auf Pfadformen wird nicht unterstützt.
  • Strichmuster: Striche sind immer durchgezogene Linien; gestrichelte oder gepunktete Strichmuster werden nicht unterstützt.
  • Pfadprüfung: Es gibt keine Methoden „isPointInPath()“ oder „isPointInStroke()“.
  • Textumrandung: Es gibt keine Unterstützung für die Umrandung von Text.
  • Filter: SVG-Filtereffekte von Canvas werden nicht unterstützt.
  • CompositeModes: Die Anzahl der Composite-Modi ist auf 3 begrenzt, die ohne Rendering in zusätzliche Puffer unterstützt werden können.
  • Schatten: Integrierte Schattenmethoden werden nicht unterstützt.

Andererseits bietet QCanvasPainter im Vergleich zu HTML-Canvas unter anderem folgende zusätzliche Funktionen:

  • Pfadgruppen: QCanvasPainter ermöglicht das Zeichnen auf statische Pfade und das Zwischenspeichern dieser Pfade als Gruppen für eine optimale GPU-Auslastung.
  • Einstellbares Antialiasing: Dank Antialiasing an Pfadknoten und SDF-Text-Rendering lässt sich die Pixelanzahl für das Antialiasing frei anpassen, um ein glatteres Zeichnen zu erzielen.
  • Box-Verlauf: Neben linearen, radialen und konischen Verläufen unterstützt QCanvasPainter auch den Verlauf für abgerundete Rechtecke („Box-Verlauf“).
  • Box-Schatten: QCanvasPainter unterstützt zudem Pinsel vom Typ „CSS box-shadow“. Die Darstellung nutzt einen SDF-Ansatz ähnlich wie Qt Quick RectangularShadow , wodurch sie sehr leistungsstark ist.
  • Rastermuster: QCanvasPainter unterstützt QCanvasGridPattern für dynamische Raster- und Balkenmuster.
  • Benutzerdefinierte Pinsel: QCanvasPainter ermöglicht zudem das Füllen und Konturieren mit benutzerdefinierten Vertex- und Fragment-Shadern (QCanvasCustomBrush). Diese benutzerdefinierten Pinsel können auch für Text verwendet werden.
  • Zeilenumbruch: QCanvasPainter unterstützt den automatischen Zeilenumbruch von Text in mehrere Zeilen mit verschiedenen Umbruchmodi.
  • Farbeffekte: Neben „globalAlpha“ unterstützt QCanvasPainter auch globale Einstellungen für Helligkeit, Kontrast und Sättigung.
  • Getönte Bilder: QCanvasPainter bietet Unterstützung für Tönungsfarben bei gemalten Bildern und Bildmustern.

QCanvasPainter ist architekturunabhängig und sowohl für Qt Quick - als auch für Qt Widgets -Anwendungen einsetzbar. Tatsächlich ist es sogar ohne diese Bibliotheken nutzbar, lediglich mit QWindow und QRhi. Um QCanvasPainter zu nutzen, verwenden Sie es je nach Architektur Ihrer Anwendung über eine dieser Klassen:

Regeln für die Umrandung

QCanvasPainter verwendet standardmäßig die Füllregel „ NonZero “ ({Qt::WindingFill}). Um die Füllung basierend auf der Richtung der Pfadpunkte auszuwählen, deaktivieren Sie die Winding-Erzwingung, indem Sie setWindingEnforce(false) aufrufen.

Grünes, nach unten zeigendes Dreieck mit einem kleineren, nicht ausgefüllten dreieckigen Loch nahe seiner Spitze
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();

Häufiger ist es jedoch, sich auf die Winding-Erzwingung zu verlassen und die bevorzugte Winding-Richtung mithilfe der Hilfsfunktionen „ setPathWinding()“, „ beginHoleSubPath()“ und „ beginSolidSubPath()“ festzulegen.

Grüner, abgerundeter, quadratischer Umriss, der ein abgerundetes Loch umschließt, in dem sich ein durchgezogener Strich und ein Punkt befinden
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();

Dokumentation zu Mitgliedstypen

enum class QCanvasPainter::CompositeOperation

Qt Canvas Painter unterstützt drei Kompositionsoperationen:

KonstantWertBeschreibung
QCanvasPainter::CompositeOperation::SourceOver0Der Standardwert. Zeichnet neue Formen über den vorhandenen Inhalt.
QCanvasPainter::CompositeOperation::SourceAtop1Die neue Form wird nur dort gezeichnet, wo sie den bestehenden Inhalt überlagert.
QCanvasPainter::CompositeOperation::DestinationOut2Der vorhandene Inhalt bleibt an den Stellen erhalten, an denen er sich nicht mit der neuen Form überschneidet.

Siehe auch „ setGlobalCompositeOperation()“.

[since 6.12] enum class QCanvasPainter::FillRule

Diese Enumeration legt fest, wie Pfade ausgefüllt werden.

KonstanteWertBeschreibung
QCanvasPainter::FillRule::NonZero0Der Pfad wird nach der „Non-Zero-Winding“-Regel ausgefüllt. Bei dieser Regel wird anhand der folgenden Methode ermittelt, ob sich ein Punkt innerhalb der Form befindet: Zeichnen Sie eine horizontale Linie vom Punkt zu einer Stelle außerhalb der Form. Bestimmen Sie, ob die Richtung der Linie an jedem Schnittpunkt nach oben oder nach unten zeigt. Die Windungszahl ergibt sich aus der Summe der Richtungen an den einzelnen Schnittpunkten. Ist die Zahl ungleich Null, liegt der Punkt innerhalb der Form. Dieser Füllmodus kann in den meisten Fällen auch als Schnittmenge geschlossener Formen betrachtet werden. Dieser Modus ist der Standard.
QCanvasPainter::FillRule::EvenOdd1Der Pfad wird nach der „Odd-Even“-Füllregel gefüllt. Bei dieser Regel wird wie folgt bestimmt, ob sich ein Punkt innerhalb der Form befindet: Zeichne eine horizontale Linie vom Punkt zu einer Stelle außerhalb der Form und zähle die Anzahl der Schnittpunkte. Ist die Anzahl der Schnittpunkte ungerade, befindet sich der Punkt innerhalb der Form.

Diese Enumeration wurde in Qt 6.12 eingeführt.

Siehe auch ` fill()`.

enum class QCanvasPainter::ImageFlag
flags QCanvasPainter::ImageFlags

Diese Enumeration definiert Flags im Zusammenhang mit Bildern. Verwenden Sie sie zusammen mit addImage() zum Setzen der Flags.

KonstanteWertBeschreibung
QCanvasPainter::ImageFlag::GenerateMipmaps1 << 0Setzen Sie diese Option, um Mipmaps für das Bild zu generieren. Mipmaps sollten verwendet werden, wenn bei Bildern, die auf eine Größe kleiner als die Originalgröße skaliert werden, eine glattere Darstellung gewünscht ist.
QCanvasPainter::ImageFlag::RepeatX1 << 1Verwenden Sie dies in Verbindung mit dem Bildmuster, um das Bild entlang der X-Koordinate zu wiederholen.
QCanvasPainter::ImageFlag::RepeatY1 << 2Verwenden Sie diese Option zusammen mit einem Bildmuster, um das Bild entlang der Y-Achse zu wiederholen.
QCanvasPainter::ImageFlag::RepeatRepeatX | RepeatYVerwenden Sie dies zusammen mit einem Bildmuster, um das Bild in beiden Koordinaten zu wiederholen.
QCanvasPainter::ImageFlag::FlipY1 << 3Spiegelt (invertiert) das Bild beim Rendern in Y-Richtung.
QCanvasPainter::ImageFlag::Premultiplied1 << 4Die Bilddaten verfügen über ein vorvervielfachtes Alpha.
QCanvasPainter::ImageFlag::Nearest1 << 5Die Bildinterpolation erfolgt nach dem „Nearest“-Verfahren statt nach dem „Linear“-Verfahren

Der Typ `ImageFlags` ist ein `typedef` für ` QFlags<ImageFlag>`. Er speichert eine OR-Kombination von `ImageFlag`-Werten.

enum class QCanvasPainter::LineCap

Mit „LineCap“ wird festgelegt, wie das Zeilenende (die Kappe) gezeichnet wird.

KonstanteWertBeschreibung
QCanvasPainter::LineCap::Butt0(Standard) Quadratischer Linienabschluss, der den Endpunkt der Linie nicht überdeckt.
QCanvasPainter::LineCap::Round1Runder Linienabschluss.
QCanvasPainter::LineCap::Square2Eckiger Linienabschluss, der den Endpunkt überdeckt und um die Hälfte der Linienbreite darüber hinausragt.

Siehe auch „ setLineCap()“.

enum class QCanvasPainter::LineJoin

Mit „LineJoin“ wird festgelegt, wie die Verbindungsstellen zwischen zwei miteinander verbundenen Linien dargestellt werden.

KonstanteWertBeschreibung
QCanvasPainter::LineJoin::Round0Der Kreisbogen zwischen den beiden Linien wird ausgefüllt.
QCanvasPainter::LineJoin::Bevel1Die dreieckige Aussparung zwischen den beiden Linien wird ausgefüllt.
QCanvasPainter::LineJoin::Miter2(Standard) Die Außenkanten der Linien werden so verlängert, dass sie sich in einem Winkel treffen, und dieser Bereich wird ausgefüllt.

Siehe auch setLineJoin() und setMiterLimit().

enum class QCanvasPainter::PathConnection

Bei einigen Zeichenmethoden wird „PathConnection“ verwendet, um festzulegen, ob der neue Pfad mit dem letzten Punkt des vorherigen Pfads verbunden werden soll.

KonstanteWertBeschreibung
QCanvasPainter::PathConnection::NotConnected0Es wird keine Linie vom letzten Punkt des vorherigen Pfades zum ersten Punkt des aktuellen Pfades gezeichnet.
QCanvasPainter::PathConnection::Connected1Der letzte Punkt des vorherigen Pfades wird mit dem ersten Punkt des aktuellen Pfades verbunden.

Siehe auch arc().

enum class QCanvasPainter::PathWinding

Mit „PathWinding“ wird die Richtung der Pfadzeichnung festgelegt. Anhand dieser Richtung wird bestimmt, ob ein Teilpfad im Pfad ausgefüllt ist oder eine Lücke darstellt.

KonstanteWertBeschreibung
QCanvasPainter::PathWinding::CounterClockWise0(Standard) Verlauf gegen den Uhrzeigersinn für geschlossene Formen.
QCanvasPainter::PathWinding::ClockWise1Wicklung im Uhrzeigersinn für Löcher.

Siehe auch „ setPathWinding()“.

enum class QCanvasPainter::TextAlign

Mit „TextAlign“ wird festgelegt, wie der Text horizontal ausgerichtet wird.

KonstanteWertBeschreibung
QCanvasPainter::TextAlign::Left0Richtet die linke Seite des Textes horizontal an der angegebenen Position aus.
QCanvasPainter::TextAlign::Right1Richtet die rechte Seite des Textes horizontal an der angegebenen Position aus.
QCanvasPainter::TextAlign::Center2Richte die Mitte des Textes horizontal an der angegebenen Position aus.
QCanvasPainter::TextAlign::Start3(Standard) Der Text wird am normalen Zeilenanfang ausgerichtet (linksbündig bei von links nach rechts schreibenden Sprachregionen, rechtsbündig bei von rechts nach links schreibenden Sprachregionen).
QCanvasPainter::TextAlign::End4Der Text wird am normalen Zeilenende ausgerichtet (rechtsbündig bei Sprachen mit Schreibrichtung von links nach rechts, linksbündig bei Sprachen mit Schreibrichtung von rechts nach links).

Siehe auch setTextAlign(), setTextDirection() und fillText().

enum class QCanvasPainter::TextBaseline

Mit „TextBaseline“ wird festgelegt, wie der Text vertikal ausgerichtet (an der Grundlinie ausgerichtet) wird.

KonstanteWertBeschreibung
QCanvasPainter::TextBaseline::Top0Richtet den oberen Rand des Textes vertikal an der angegebenen Position aus.
QCanvasPainter::TextBaseline::Hanging1Richtet die hängende Grundlinie des Textes vertikal an der angegebenen Position aus.
QCanvasPainter::TextBaseline::Middle2Richten Sie die Mitte des Textes vertikal an der angegebenen Position aus.
QCanvasPainter::TextBaseline::Alphabetic3(Standard) Richten Sie die Grundlinie des Textes vertikal an der angegebenen Position aus.
QCanvasPainter::TextBaseline::Bottom4Richte den unteren Rand des Textes vertikal an der angegebenen Position aus.

Siehe auch setTextBaseline() und fillText().

enum class QCanvasPainter::TextDirection

Mit „TextDirection“ wird festgelegt, wie der Text horizontal ausgerichtet wird.

KonstanteWertBeschreibung
QCanvasPainter::TextDirection::LeftToRight0Die Textrichtung ist von links nach rechts.
QCanvasPainter::TextDirection::RightToLeft1Die Textrichtung verläuft von rechts nach links.
QCanvasPainter::TextDirection::Inherit2(Standard) Die Textrichtung wird von ` QGuiApplication ` übernommen. Siehe https://doc.qt.io/qt-6/qguiapplication.html#layoutDirection-prop.
QCanvasPainter::TextDirection::Auto3Die Textrichtung wird anhand der Textzeichenfolge automatisch ermittelt. Siehe QString::isRightToLeft().

Hinweis: Da hierfür eine Analyse des Textes erforderlich ist, ist diese Option möglicherweise langsamer als andere Optionen.

Siehe auch setTextDirection(), setTextAlign() und fillText().

enum class QCanvasPainter::WrapMode

Mit „WrapMode“ wird festgelegt, wie der Text auf mehrere Zeilen umgebrochen wird.

KonstanteWertBeschreibung
QCanvasPainter::WrapMode::NoWrap0(Standard) Es erfolgt kein Zeilenumbruch. Wenn der Text nicht genügend Zeilenumbrüche enthält, überschreitet contentWidth eine festgelegte Breite.
QCanvasPainter::WrapMode::Wrap1Wenn möglich, erfolgt der Zeilenumbruch an einer Wortgrenze; andernfalls erfolgt er an der entsprechenden Stelle in der Zeile, auch mitten in einem Wort.
QCanvasPainter::WrapMode::WordWrap2Der Zeilenumbruch erfolgt ausschließlich an Wortgrenzen. Ist ein Wort zu lang, überschreitet die Inhaltsbreite die festgelegte Breite.
QCanvasPainter::WrapMode::WrapAnywhere3Der Zeilenumbruch erfolgt an einer beliebigen Stelle in einer Zeile, auch wenn dies mitten in einem Wort geschieht.

Siehe auch setTextWrapMode() und fillText().

Dokumentation der Mitgliedsfunktionen

QCanvasPainter::QCanvasPainter()

Erstellt einen „Painter“.

[noexcept] QCanvasPainter::~QCanvasPainter()

Vernichtet den Maler.

qsizetype QCanvasPainter::activeImageCount() const

Gibt die Anzahl der aktiven „ QCanvasImage “-Objekte zurück, die bei diesem „ QCanvasPainter “ registriert sind. Dazu gehören auch die intern erstellten Bilder für „ gradients “.

QCanvasImage Objekte, die durch die Registrierung von „ QCanvasOffscreenCanvas “-Instanzen oder durch extern verwaltete Texturen erstellt wurden, werden von dieser Funktion nicht berücksichtigt.

Siehe auch activeImageMemoryUsage(), addImage() und removeImage().

qsizetype QCanvasPainter::activeImageMemoryUsage() const

Gibt eine Schätzung in Kilobyte des Speicherbedarfs der Bilddaten (Pixel) für alle aktiven „ QCanvasImage “-Instanzen dieses „painter“ zurück, die durch die Überladung von „ addImage()“ unter Verwendung von „ QImage “ erstellt wurden. Dies umfasst auch die Daten von intern erstellten Bildern für „ gradients “.

QCanvasPainter Es werden keine Kopien der CPU-seitigen „ QImage “-Daten aufbewahrt, sobald „ addImage()“ zurückgekehrt ist. Daher ist das Ergebnis dieser Funktion eine Annäherung an den GPU-Speicher, der für Texturen verwendet wird.

Hinweis: Der Wert ist lediglich eine Schätzung, die auf dem Bildformat und den Abmessungen basiert. Qt hat keine Kenntnis darüber, wie die Daten für Texturen auf der GPU-Seite im Speicher abgelegt und angeordnet sind.

Offscreen-Canvases und extern verwaltete Texturen, die über die anderen Überladungen von ` addImage()` registriert wurden, werden von dieser Funktion nicht berücksichtigt.

Für jede gültige ` QCanvasImage` kann die jeweilige Größe in Byte jederzeit durch Aufruf von ` sizeInBytes()` abgefragt werden. Diese Funktion liefert auch dann gültige Ergebnisse, wenn die ` QCanvasImage ` aus einer ` QCanvasOffscreenCanvas ` oder ` QRhiTexture` erstellt wurde, berücksichtigt jedoch keine Mipmap- oder Multisample-Daten.

Siehe auch activeImageCount(), addImage() und removeImage().

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

Fügt „ image “ mit „ flags “ hinzu, das dem Painter als Textur zur Verfügung steht. Gibt „ QCanvasImage “ mit der Textur-ID und weiteren Informationen zum Bild zurück. Die zurückgegebene „ QCanvasImage “ kann anschließend mit „ drawImage “ und „ QCanvasImagePattern “ verwendet werden. Nach dem Aufruf dieser Methode muss das „ image “ „ QImage “ nicht mehr im Speicher gehalten werden.

Der Aufruf mit demselben ` image ` ist eine ressourcenschonende Operation, da ein Cache-Treffer erwartet wird.

Bei der Optimierung ist darauf zu achten, dass addImage() nur einmal aufgerufen wird. Je nach Anwendungsdesign reicht dies jedoch nicht immer aus. Wenn beispielsweise die zugrunde liegenden Grafikressourcen verloren gehen – z. B. weil der „Painter“ intern mit einem neuen ` QRhi ` verknüpft wird, da ein Widget auf eine neue oberste Ebene verschoben wurde –, ist der Aufruf dieser Funktion unerlässlich, um die nativen Grafiktexturen aus ` image` neu zu erstellen.

Siehe auch drawImage() und removeImage().

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

Fügt „ texture “ mit „ flags “ hinzu, das dem Painter als Textur zur Verfügung steht. Das zurückgegebene „ QCanvasImage “ kann mit „ drawImage “ und „ QCanvasImagePattern “ verwendet werden.

Hinweis: Die Eigentumsrechte an „ texture “ werden nicht übernommen.

Dies ist eine überladene Funktion.

Siehe auch „ drawImage()“ und „ removeImage()“.

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

Registriert „ canvas “ mit „ flags “ beim Painter, sodass es als Bild verfügbar ist. Das zurückgegebene „ QCanvasImage “ kann mit „ drawImage “ und „ QCanvasImagePattern “ verwendet werden.

Hinweis: „ canvas “ verwaltet weiterhin die zugrunde liegenden nativen Grafikressourcen, was bedeutet, dass „ removeImage()“ „ canvas “ nicht ungültig macht.

Dies ist eine überladene Funktion.

Siehe auch drawImage() und removeImage().

void QCanvasPainter::addPath(const QPainterPath &path)

Fügt „ path “ zum aktuellen Pfad hinzu.

Hinweis: QCanvasPainter verwendet standardmäßig die Füllregel „ NonZero “ (Qt::WindingFill), während QPainterPath standardmäßig die Füllregel „ Qt::OddEvenFill “ verwendet. Denken Sie daher daran, die Füllregel bei Bedarf anzupassen, beispielsweise mithilfe von ` setFillRule()`.

Hinweis: Diese Methode dient hauptsächlich der Kompatibilität mit QPainter und QPainterPath. Sie bietet keine Leistungssteigerung im Vergleich zum direkten Zeichnen des Pfades mit den Methoden unter QCanvasPainter.

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

Fügt „ path “ in den aktuellen Pfad ein und verwendet dabei optional „ transform “, um die Pfadpunkte zu ändern. Wenn „ transform “ nicht angegeben wird (oder es sich um die Einheitsmatrix handelt), ist dieser Vorgang sehr schnell, da die Pfaddaten wiederverwendet werden.

Zwei identische grüne Kreise, wobei der zweite eine verschobene Kopie des ersten ist
// 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())

Fügt „ path “ zum aktuellen Pfad hinzu, beginnend mit dem Befehl unter start und einschließlich count Befehlen. Optional kann transform verwendet werden, um die Pfadpunkte zu ändern. Der Bereich von start und count wird überprüft, damit nicht mehr als QCanvasPath::commandsSize() Befehle aufgerufen werden. Falls der Pfad nicht von der aktuellen Pfadposition aus fortgesetzt werden soll, rufen Sie zunächst moveTo() auf, z. B. mit path.positionAt(start - 1).

Sinuswelle über einem kürzeren Abschnitt derselben Welle, der darunter kopiert wurde
// 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)

Erstellt einen neuen Teilpfad in Form eines Kreisbogens. Der Mittelpunkt des Bogens liegt bei centerX, centerY, mit radius, und der Bogen wird vom Winkel a0 bis a1 gezeichnet und in direction (ClockWise oder CounterClockWise) geschwenkt. Wenn connection gleich NotConnected ist, fügt der Bogen keine Linie von der vorherigen Pfadposition zum Anfang des Bogens hinzu. Winkel werden in Radianten angegeben.

Eine grüne, kreisstückförmige Fläche, die drei Viertel eines Kreises ausfüllt, wobei ein Quadrant leer bleibt
p->beginPath();
p->moveTo(100, 100);
p->arc(100, 100, 80, 0, 1.5 * M_PI);
p->closePath();
p->fill();
p->stroke();

Hinweis: Während der HTML-Canvas-2D-Kontext die Funktion `arc()` zum Zeichnen von Kreisen verwendet, wird bei „ QCanvasPainter “ empfohlen, hierfür die Funktionen ` circle()` oder ` ellipse()` zu verwenden.

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

Erstellt einen neuen Teilpfad in Form eines Kreisbogens. Der Mittelpunkt des Bogens liegt bei centerPoint, der Radius beträgt radius, und der Bogen wird vom Winkel a0 bis zum Winkel a1 gezeichnet und in direction (ClockWise oder CounterClockWise) gezeichnet. Wenn connection den Wert NotConnected hat, fügt der Bogen keine Linie von der vorherigen Pfadposition zum Startpunkt des Bogens hinzu. Winkel werden in Radianten angegeben.

Hinweis: Während der HTML-Canvas-2D-Kontext die Funktion `arc()` zum Zeichnen von Kreisen verwendet, wird bei „ QCanvasPainter “ empfohlen, hierfür die Funktionen ` circle()` oder ` ellipse()` zu verwenden.

Dies ist eine überladene Funktion.

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

Fügt an der Ecke, die durch den letzten Pfadpunkt und zwei angegebene Punkte (x1, y1 und x2, y2) definiert ist, ein Bogensegment mit der Koordinaten radius hinzu. Der Bogen wird bei Bedarf automatisch durch eine Gerade mit dem letzten Punkt des Pfades verbunden.

Ein hakenförmiger Pfad mit einem horizontalen oberen Abschnitt, einer großen, abgerundeten Kurve und einer kleinen Schleife am Ende
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)

Fügt an der Ecke, die durch den letzten Pfadpunkt und zwei angegebene Punkte (controlPoint1 und controlPoint2) definiert ist, ein Bogensegment hinzu, wobei radius gilt. Der Bogen wird bei Bedarf automatisch mit einer geraden Linie an den letzten Punkt des Pfades angeschlossen.

Dies ist eine überladene Funktion.

void QCanvasPainter::beginHoleSubPath()

Einen Teilpfad „hole“ starten. Dies entspricht setPathWinding(QCanvasPainter::PathWinding::ClockWise))

Grüner Kreis mit einem quadratischen Loch, in dem sich ein kleinerer, ausgefüllter grüner Kreis befindet
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();

Siehe auch beginSolidSubPath().

void QCanvasPainter::beginPath()

Beginnt mit dem Zeichnen eines neuen Pfades und löscht dabei den aktuellen Pfad.

void QCanvasPainter::beginSolidSubPath()

Starten Sie einen absoluten Teilpfad. Dies entspricht setPathWinding(QCanvasPainter::PathWinding::CounterClockWise))

Siehe auch beginHoleSubPath().

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

Fügt ein kubisches Bézier-Segment vom letzten Punkt des Pfades über zwei Kontrollpunkte (cp1X, cp1Y und cp2X, cp2Y) bis zum angegebenen Punkt (x, y) hinzu.

Glatte S-förmige kubische Bézier-Kurve
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)

Fügt ein kubisches Bézier-Segment vom letzten Punkt des Pfades über zwei Kontrollpunkte (controlPoint1 und controlPoint2) bis zum angegebenen Punkt endPoint hinzu.

Dies ist eine überladene Funktion.

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

Erstellt einen neuen kreisförmigen Teilpfad, der auf den Punkten ( centerX, centerY) zentriert ist und einen Radius von radius hat.

Grüner Kreis mit einem dunkelblaugrünen Rand
p->beginPath();
p->circle(100, 100, 80);
p->fill();
p->stroke();

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

Erstellt einen neuen kreisförmigen Teilpfad, dessen Mittelpunkt bei „ centerPoint “ liegt und dessen Radius „ radius “ beträgt.

Dies ist eine überladene Funktion.

void QCanvasPainter::cleanupResources()

Entfernt nicht verwendete Texturen aus dem Cache.

Zudem können beim Aufruf dieser Funktion andere Caches und Pools verkleinert werden, um den Speicherverbrauch zu minimieren. Dies kann möglicherweise zu aufwändigeren Zeichenaufrufen im Anschluss führen.

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

Löscht die Pixel in einem rechteckigen Bereich, indem das durch x, y, width und height angegebene Rechteck mit transparentem Schwarz gefüllt wird. Da das Löschen keine Überblendung erfordert, kann es schneller sein als fillRect().

Grüner Kreis mit einer vertikalen, rechteckigen Kerbe, die oben herausgeschnitten ist
p->beginPath();
p->circle(100, 100, 80);
p->fill();
p->stroke();
p->clearRect(60, 0, 80, 120);

void QCanvasPainter::clearRect(const QRectF &rect)

Löscht die Pixel in einem rechteckigen Bereich, indem das durch ` rect ` angegebene Rechteck mit transparentem Schwarz gefüllt wird. Hierbei handelt es sich um eine überladene Methode, die ` QRectF` verwendet.

Dies ist eine überladene Funktion.

void QCanvasPainter::closePath()

Schließt den aktuellen Teilpfad mit einem Liniensegment ab. Dies entspricht dem Befehl „ lineTo “ ([Startpunkt]) als letztes Pfadelement.

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

Gibt eine neue Offscreen-Leinwand mit den angegebenen Werten für „ pixelSize “, „ sampleCount “ und „ flags “ zurück.

Die Größe des Canvas wird in Pixeln angegeben. Die Eigenschaften ` pixelSize`, ` sampleCount` und ` flags ` sind danach unveränderlich. Um einen Canvas mit einer anderen Größe, einer anderen Sample-Anzahl oder anderen Flags zu erhalten, erstellen Sie einen neuen.

Um eine Offscreen-Canvas mit Zeichenbefehlen anzusteuern, rufen Sie bei der Arbeit mit der Low-Level-API die entsprechende Überladung von ` QCanvasRhiPaintDriver::beginPaint()` auf, oder bei Verwendung der Komfort-Widget- oder „ Qt Quick “-Elementklassen die Methoden ` QCanvasPainterWidget::beginCanvasPainting()` oder ` QCanvasPainterItemRenderer::beginCanvasPainting()`.

Normalerweise wird der Inhalt der Leinwand beim Zeichnen gelöscht. Um dies zu deaktivieren, übergeben Sie ` PreserveContents ` in ` flags`.

Um Multisample-Rendering auf die Leinwand anzufordern (Multisample-Antialiasing, MSAA), legen Sie eine Sample-Anzahl größer als 1 fest, beispielsweise 4 oder 8. Das Beibehalten des Leinwandinhalts zwischen den Render-Durchläufen wird jedoch nicht unterstützt, wenn Multisampling aktiviert ist, und das Flag ` PreserveContents ` funktioniert in diesem Fall nicht.

Hinweis: Eine Offscreen-Canvas wird durch eine vom Hauptrenderziel unabhängige Textur gestützt, und das Rendern darauf erfolgt immer mit einem Skalierungsfaktor (Gerätepixelverhältnis) von 1. Um beispielsweise eine Canvas zu erstellen, die den tatsächlichen Renderabmessungen einer „ QCanvasPainterWidget “ entspricht, übergeben Sie „ size() * devicePixelRatio() “ als „ pixelSize “, da die „ size() “ des Widgets lediglich die logische Größe ohne den Skalierungsfaktor angibt.

void QCanvasPainter::destroyCanvas(QCanvasOffscreenCanvas &canvas)

Zerstört die Ressourcen, die hinter „ canvas “ stehen. „ canvas “ wird dann zu „ null canvas “.

Der „Painter“ führt dies automatisch bei seiner Zerstörung durch. Daher ist der Aufruf dieser Funktion nur dann erforderlich, wenn die zugehörigen Ressourcen sofort freigegeben werden sollen.

void QCanvasPainter::drawBoxShadow(const QCanvasBoxShadow &shadow)

Zeichnet ein Rechteck mit der Funktion „ shadow “. Der Schatten wird mit den durch „ shadow “ definierten Parametern für Position, Größe, Farbe, Unschärfe usw. gezeichnet. Der Aufruf von „ beginPath()“ vor dieser Methode ist nicht erforderlich.

Hinweis: Um den von `drawBoxShadow()` abgedeckten Bereich visuell zu erkennen, setzen Sie die Umgebungsvariable ` QCPAINTER_DEBUG_SHADOW_RECT `.

Ein grünes, abgerundetes Quadrat, das an allen Seiten einen sanften grauen Kasten-Schatten wirft
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();

Siehe auch QCanvasBoxShadow.

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

Zeichne „ image “ in „ x “, „ y “, in der Standardgröße.

Grünes Qt-Logo in Standardgröße
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
p->drawImage(image, 36, 36);

Siehe auch addImage().

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

Zeichne image in der Position und Größe von destinationRect.

Dies ist eine überladene Funktion.

Siehe auch addImage().

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

Zeichne „ image “ in der Position und Größe von „ destinationRect “ aus dem Bildbereich „ sourceRect “ ein.

Vergrößerter Buchstabe „Q“, der aus einem Quellbereich des Qt-Logos ausgeschnitten wurde
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);

Dies ist eine überladene Funktion.

Siehe auch addImage().

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

Zeichne „ image “ in „ x “, „ y “ an den angegebenen Koordinaten „ width “ und „ height “.

Das grüne Qt-Logo wurde in die Höhe gestreckt, um es an eine benutzerdefinierte Breite und Höhe anzupassen
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
p->drawImage(image, 50, 0, 100, 200);

Dies ist eine überladene Funktion.

Siehe auch addImage().

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

Erstellt einen neuen ellipsenförmigen Teilpfad, dessen Mittelpunkt bei ( centerX, centerY) liegt, mit den Werten radiusX und radiusY.

Breite grüne Ellipse mit einem dunkelblaugrünen Umriss
p->beginPath();
p->ellipse(100, 100, 80, 60);
p->fill();
p->stroke();

void QCanvasPainter::ellipse(const QRectF &rect)

Erstellt einen neuen ellipsenförmigen Teilpfad in „ rect “. Diese Ellipse deckt den Bereich „ rect “ ab.

Ein hoher, ellipsenförmiger Umriss, der in ein ausgefülltes grünes Rechteck eingefügt ist
QRectF rect(40, 20, 120, 160);
p->fillRect(rect);
p->beginPath();
p->ellipse(rect);
p->stroke();

Dies ist eine überladene Funktion.

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

Erstellt einen neuen ellipsenförmigen Teilpfad, dessen Mittelpunkt bei centerPoint liegt und dessen Achsen bei radiusX und radiusY liegen.

Dies ist eine überladene Funktion.

void QCanvasPainter::fill()

Füllt den aktuellen Pfad mit dem aktuellen Füllstil und der aktuellen Füllregel.

Zwei grüne Balken und ein grüner Kreis, die zu einer einzigen Form zusammengefügt sind
p->beginPath();
p->rect(20, 20, 40, 160);
p->rect(140, 20, 40, 160);
p->circle(100, 100, 60);
p->fill();

Siehe auch setFillStyle() und setFillRule().

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

Füllt den aktuellen Pfad mit dem aktuellen Füllstil und der Füllregel „ fillRule “.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.12 eingeführt.

Siehe auch „ setFillStyle()“ und „ setFillRule()“.

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

Füllt den „ path “ mit dem aktuellen Füllstil und der aktuellen Füllregel und ordnet ihn dem „ pathGroup “ zu. Das Zeichnen über den „ QCanvasPath “ ist optimal, wenn der Pfad mehr Befehle enthält und größtenteils statisch ist.

Wenn „ pathGroup “ den Wert „ -1 “ hat, wird der Pfad auf der GPU-Seite nicht zwischengespeichert. Dies ist die Standardeinstellung. Um die Zwischenspeicherung von Pfaddaten anzufordern, übergeben Sie einen Wert, der gleich oder größer als „ 0 “ ist. Weitere Informationen zur Verwendung von Pfad-Cache-Gruppen finden Sie in der Dokumentation unter „ QCanvasPath “.

Der Aufruf von ` beginPath()` vor dieser Methode ist nicht erforderlich.

Ein Stapel gefüllter Querstäbe unterschiedlicher Breite, die die Umrisse einer Sanduhr bilden
// 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);

Dies ist eine überladene Funktion.

Siehe auch ` setFillStyle()`, ` setFillRule()` und ` removePathGroup()`.

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

Füllt den „ path “ mit dem aktuellen Füllstil und der aktuellen Füllregel fillRule

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.12 eingeführt.

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

Zeichnet ein gefülltes Rechteck an der angegebenen Position ( x, y) mit der Größe width, height.

Hinweis: Diese Funktion dient der Vereinfachung. Wenn Sie mehr als nur ein Rechteck füllen möchten, verwenden Sie vorzugsweise ` rect()`.

Vollständig grün ausgefülltes Quadrat
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)

Zeichnet ein gefülltes Rechteck in ` rect`. Hierbei handelt es sich um eine überladene Methode, die ` QRectF` verwendet.

Hinweis: Diese Funktion dient der Vereinfachung. Wenn Sie mehr als nur ein Rechteck füllen möchten, verwenden Sie vorzugsweise ` rect()`.

Dies ist eine überladene Funktion.

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

Zeichnet eine „ text “-Zeichenkette an der angegebenen Position ( x, y) mit den aktuellen Werten für „textAlign“ und „textBaseline“. Um den Text mehrzeilig umbrechen zu lassen, setzen Sie den Zeilenumbruchmodus mithilfe von setTextWrapMode() auf einen anderen Wert als den Standardwert „ NoWrap “. Der optionale Parameter „ maxWidth “ ist standardmäßig auf „ 0 “ gesetzt. Das bedeutet, dass der Text beispielsweise bei der Einstellung „ WordWrap “ nach jedem Wort umgebrochen wird. Setzen Sie den Parameter „ maxWidth “ auf die gewünschte Zeilenbreite in Pixeln.

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);

Siehe auch setTextAlign(), setTextBaseline() und setTextWrapMode().

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

Zeichnet die Zeichenkette „ text “ innerhalb des Bereichs „ rect “ mit den aktuellen Werten für „textAlign“ und „textBaseline“. Die Breite des Parameters „rect“ wird als „maxWidth“ verwendet.

Dies ist eine überladene Methode, die „ QRectF “ verwendet. Oft ist es sinnvoll, die Textgrundlinie auf „ TextBaseline::Top “ oder „ TextBaseline::Middle “ zu setzen, wenn Text mit dieser Methode gezeichnet wird.

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);

Dies ist eine überladene Funktion.

Siehe auch „ setTextAlign()“, „ setTextBaseline()“ und „ setTextWrapMode()“.

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

Zeichnet die Zeichenkette „ text “ an der angegebenen Position „ point “ mit den aktuellen Werten für „textAlign“ und „textBaseline“ ein. Um den Text in mehrere Zeilen umbrechen zu lassen, setzen Sie den Zeilenumbruchmodus mithilfe von „ setTextWrapMode()“ auf einen anderen Wert als den Standardwert „ NoWrap “. Der optionale Parameter „ maxWidth “ ist standardmäßig auf „ 0 “ gesetzt. Das bedeutet, dass beispielsweise bei der Einstellung „ WordWrap “ der Text nach jedem Wort umgebrochen wird. Setzen Sie den Parameter ` maxWidth ` auf die gewünschte Zeilenbreite in Pixeln.

Dies ist eine überladene Methode, die „ QPointF “ verwendet.

Dies ist eine überladene Funktion.

Siehe auch „ setTextAlign()“, „ setTextBaseline()“ und „ setTextWrapMode()“.

QTransform QCanvasPainter::getTransform() const

Gibt die aktuelle Transformation zurück.

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

Fügt eine Liniensegment vom letzten Punkt des Pfades zum Punkt ( x, y) hinzu.

Zwei gerade Linienabschnitte, die sich in einem Punkt treffen und eine Ecke bilden
p->beginPath();
p->moveTo(20, 20);
p->lineTo(140, 180);
p->lineTo(180, 120);
p->stroke();

void QCanvasPainter::lineTo(QPointF point)

Fügt eine Liniensegment vom letzten Punkt des Pfades bis zum „ point “ hinzu.

Dies ist eine überladene Funktion.

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

Startet einen neuen Teilpfad mit ( x, y) als erstem Punkt.

void QCanvasPainter::moveTo(QPointF point)

Startet einen neuen Teilpfad mit „ point “ als erstem Punkt.

Dies ist eine überladene Funktion.

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

Fügt ein quadratisches Bézier-Segment vom letzten Punkt des Pfades über einen Kontrollpunkt (cpX, cpY) zum angegebenen Punkt (x, y) hinzu.

Spitz zulaufende grüne Blattform, gebildet durch zwei quadratische Kurven
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)

Fügt ein quadratisches Bézier-Segment vom letzten Punkt des Pfades über einen „ controlPoint “ zum angegebenen „ endPoint “ hinzu.

Dies ist eine überladene Funktion.

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

Erstellt einen neuen rechteckigen Teilpfad an der Position x, y mit den Abmessungen width, height.

Grünes Quadrat mit dunklem, blaugrünem Rand
p->beginPath();
p->rect(20, 20, 160, 160);
p->fill();
p->stroke();

void QCanvasPainter::rect(const QRectF &rect)

Erstellt einen neuen rechteckigen Teilpfad an der Position „ rect “. Hierbei handelt es sich um eine überladene Methode, die „ QRectF “ verwendet.

Dies ist eine überladene Funktion.

void QCanvasPainter::removeImage(const QCanvasImage &image)

Gibt die mit ` image ` verknüpften Ressourcen frei und entfernt das Bild aus dem Painter.

Hinweis: Diese Funktion muss normalerweise nicht aufgerufen werden, da Ressourcen wie Texturen ohnehin im Destruktor des Painters freigegeben werden. Diese Funktion ist nützlich, wenn aufgrund einer großen Anzahl von Bildern der Speicherbedarf reduziert werden muss und einige davon nicht mehr verwendet werden.

Hinweis: Entfernte Bilder können nicht mehr für Malvorgänge verwendet werden.

Hinweis: Ressourcen wie die mit der zugrunde liegenden 3D-API erstellten Texturen werden möglicherweise nicht sofort freigegeben. Solche Vorgänge können auf nachfolgende Frames verschoben werden, typischerweise wenn dieses ` QCanvasPainter ` erneut mit dem Zeichnen beginnt, nachdem die aktiven Zeichenaufrufe übermittelt wurden.

Siehe auch ` addImage()`.

void QCanvasPainter::removePathGroup(int pathGroup)

Entfernt „ pathGroup “ aus dem Painter-Cache. Wenn anschließend „ fill()“ oder „ stroke()“ für „ pathGroup “ aufgerufen wird, wird der Pfad im Gruppen-Cache neu generiert.

Hinweis: Dies muss normalerweise nicht aufgerufen werden, da Pfade im Destruktor des Painters entfernt werden. Verwenden Sie dies nur, um den Speicherverbrauch zu reduzieren, wenn pathGroup nicht mehr benötigt wird oder z. B. wenn der Pfad deutlich weniger Befehle enthält als zuvor und die Puffergröße verringert werden soll.

Siehe auch „ fill()“ und „ stroke()“.

void QCanvasPainter::reset()

Setzt den aktuellen Malzustand auf die Standardwerte zurück.

Dazu gehören die Strich- und Füllstile sowie die zugehörigen Eigenschaften, die Transformationsmatrix, der Ausschnittbereich, die textbezogenen Einstellungen, die Compositing-Eigenschaften, der Zeichnungszustandsstapel und die Antialiasing-Einstellungen.

Hinweis: Diese Methode unterscheidet sich von der reset()-Methode des HTML-Canvas-2D-Kontexts darin, dass sie die Canvas-Puffer nicht visuell löscht.

Hinweis: Die Werte von ` setWindingEnforce()` und ` setHighQualityStroking()` werden nicht geändert.

Ein gedrehtes, grünes, abgerundetes Rechteck über einem schwarz gefüllten Quadrat und einem umrandeten Quadrat, das nach dem Zurücksetzen gezeichnet wurde
// 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);

Siehe auch „ save()“ und „ restore()“.

void QCanvasPainter::resetClipping()

Setzt die Clipping-Einstellung zurück und deaktiviert sie.

Siehe auch „ setClipRect()“.

void QCanvasPainter::resetTransform()

Setzt die aktuelle Transformation auf eine Einheitsmatrix zurück.

void QCanvasPainter::restore()

Ruft den aktuellen Render-Zustand ab und stellt ihn wieder her. Der zuvor gespeicherte Zustand wird somit wiederhergestellt. Wenn save() nicht aufgerufen wurde und der Zustandsstapel leer ist, hat der Aufruf dieser Funktion keine Auswirkung.

Siehe auch ` save()`.

void QCanvasPainter::rotate(qreal angle)

Dreht das aktuelle Koordinatensystem um angle im Uhrzeigersinn.

Der Winkel wird in Radianten angegeben. Verwenden Sie qDegreesToRadians(), um Grad in Radianten umzurechnen.

Ein grünes, abgerundetes Rechteck, um 45 Grad gedreht, mit dem Text „Cute!“, der entlang des Rechtecks gedreht ist
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)

Erstellt einen neuen Unterpfad in Form eines abgerundeten Rechtecks an der Position x, y mit den Abmessungen width, height. Die Ecken werden wie folgt abgerundet: radius.

Grünes, abgerundetes Quadrat mit einem dunkelblaugrünen Umriss
p->beginPath();
p->roundRect(20, 20, 160, 160, 30);
p->fill();
p->stroke();

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

Erstellt einen neuen, abgerundeten Rechteck-Teilpfad an der Position „ rect “ mit den Ecken „ radius “. Hierbei handelt es sich um eine überladene Methode, die „ QRectF “ verwendet.

Dies ist eine überladene Funktion.

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

Erstellt einen neuen, abgerundeten, rechteckigen Teilpfad unter rect. Die Ecken können je nach Ecke unterschiedlich abgerundet werden, mit radiusTopLeft, radiusTopRight, radiusBottomRight und radiusBottomLeft.

Dies ist eine überladene Funktion.

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

Erstellt einen neuen, abgerundeten, rechteckigen Teilpfad an der Position x, y mit den Abmessungen width, height. Die Eckenrundung kann je nach Ecke variieren, mit den Werten radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft.

Grünes Quadrat mit einer spitzen Ecke oben links und drei abgerundeten Ecken mit unterschiedlichem Radius
p->beginPath();
p->roundRect(20, 20, 160, 160,
             0, 40, 20, 80);
p->fill();
p->stroke();

Dies ist eine überladene Funktion.

void QCanvasPainter::save()

Speichert den aktuellen Render-Zustand in einem Statusstapel. Zum Wiederherstellen des Zustands muss die entsprechende Funktion „ restore()“ aufgerufen werden.

Zwei Rechteckumrisse, zwischen denen sich ein leicht gedrehtes Rechteck befindet
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);

Siehe auch ` restore()`.

void QCanvasPainter::scale(qreal scale)

Skaliert das aktuelle Koordinatensystem um den Faktor scale. Sowohl die x- als auch die y-Koordinaten werden gleichmäßig skaliert.

Verschachtelte quadratische Umrisse, die durch wiederholte Skalierung zur Mitte hin kleiner werden
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)

Skaliert das aktuelle Koordinatensystem um scaleX und scaleY.

Dies ist eine überladene Funktion.

void QCanvasPainter::setAntialias(qreal antialias)

Legt den aktuellen Antialiasing-Wert auf „ antialias “ in Pixeln fest. Ein höherer Antialiasing-Wert sorgt für eine glattere Darstellung. Dies wirkt sich nur auf das Zeichnen von Füllungen und Konturen aus, nicht auf Bilder oder Texte. Der Standardwert ist „ 1.0 “ und der Maximalwert ist „ 10.0 “.

Das Anti-Aliasing kann pro Pfad angepasst werden, sodass es vor jedem Strich bzw. jeder Füllung festgelegt werden kann. Um das Anti-Aliasing zu deaktivieren und den Rechenaufwand zu reduzieren, setzen Sie den Anti-Aliasing-Wert auf 0.

Eine Reihe von Wellenlinien, die mit zunehmendem Antialiasing immer weicher und unschärfer werden
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();
}

Siehe auch setTextAntialias().

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

Setzt das aktuelle „Scissor“-Rechteck auf (x, y, width, height). Das „Scissor“-Rechteck wird durch die aktuelle Transformation transformiert.

Hinweis: Das Clipping ist mit einem gewissen Leistungsaufwand verbunden und sollte nur bei Bedarf verwendet werden.

Ein grüner Viertelkreis und der Text „Clip me“, der an einen quadratischen Bereich angeheftet ist
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);

Siehe auch resetClipping().

void QCanvasPainter::setClipRect(const QRectF &rect)

Setzt das aktuelle Scherenrechteck auf „ rect “. Das Scherenrechteck wird durch die aktuelle Transformation transformiert.

Hinweis: Das Clipping ist mit einem gewissen Performance-Aufwand verbunden und sollte nur bei Bedarf verwendet werden.

Dies ist eine überladene Funktion.

Siehe auch „ resetClipping()“.

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

Legt die Regel für die Pfadfüllung auf „ fillRule “ fest. Dieser Wert gilt für alle Aufrufe von „ fill()“, die nach dem Festlegen der Regel erfolgen. Die Standardregel für die Pfadfüllung lautet QCanvasPainter::FillRule::NonZero

Zwei sich überlappende grüne fünfzackige Sterne, von denen einer ausgefüllt ist und der andere in der Mitte eine Lücke aufweist
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();

Diese Funktion wurde in Qt 6.12 eingeführt.

void QCanvasPainter::setFillStyle(QColor color)

Legt den Füllstil auf ein durchgefärbtes „ color “ fest. Der Standard-Füllstil ist durchgefärbt schwarz (0, 0, 0, 1).

Konzentrische, gefüllte Quadrate in Schwarz, Dunkelblaugrün und Grün
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)

Setzt den Füllstil auf „ brush “. Der Standard-Füllstil ist durchgehend schwarz (0, 0, 0, 1).

Grünes Quadrat mit einem radialen Farbverlauf, der an den Rändern in dunkles Blaugrün übergeht
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);

Dies ist eine überladene Funktion.

void QCanvasPainter::setFont(const QFont &font)

Legt „ font “ als aktuell aktive Schriftart fest.

void QCanvasPainter::setGlobalAlpha(qreal alpha)

Setzt den globalen Alpha-Wert (Transparenz) auf alpha. Dieser Alpha-Wert wird auf alle gerenderten Formen angewendet. Bereits transparente Pfade werden ebenfalls proportional transparenter. Der Alpha-Wert sollte zwischen 0,0 (vollständig transparent) und 1,0 (vollständig undurchsichtig) liegen. Standardmäßig beträgt der Alpha-Wert 1.0.

Vier Qt-Logos auf grünen Kacheln, die über das Raster hinweg vollständig transparent werden
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)

Legt die globale Helligkeit auf „ value “ fest. Diese Helligkeit wird auf alle gerenderten Formen angewendet. Bei einem Wert von 0 wird die Darstellung komplett schwarz. Der Wert kann auch größer als 1,0 sein, um die Helligkeit zu erhöhen. Standardmäßig beträgt die Helligkeit „ 1.0 “.

Vier Qt-Logos auf grünen Kacheln, deren Farbton über das Raster hinweg von hell bis fast schwarz abnimmt
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)

Setzt den globalen Composite-Modus auf „ operation “. Dieser Modus wird auf alle Zeichenvorgänge angewendet. Der Standardmodus ist „ QCanvasPainter::CompositeOperation::SourceOver “.

Hinweis: Damit die Composite-Modi ordnungsgemäß funktionieren, müssen „ alphaBlending “ aktiviert und ein transparenter Hintergrund für die Leinwand verwendet werden.

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)

Setzt den globalen Kontrast auf „ value “. Dieser Kontrast wird auf alle gerenderten Formen angewendet. Bei einem Wert von 0 wird die Darstellung vollständig grau (0,5; 0,5; 0,5). Der Wert kann auch größer als 1,0 sein, um den Kontrast zu erhöhen. Standardmäßig beträgt der Kontrast „ 1.0 “.

Vier Qt-Logos auf grünen Kacheln, die von stark kontrastreich bis zu verblasstem Grau reichen
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)

Legt die globale Sättigung auf „ value “ fest. Diese Sättigung wird auf alle gerenderten Formen angewendet. Bei einem Wert von 0 wird die Sättigung deaktiviert, sodass die Darstellung vollständig in Graustufen erfolgt. Der Wert kann auch größer als 1,0 sein, um die Sättigung zu erhöhen. Standardmäßig beträgt die Sättigung „ 1.0 “.

Vier Qt-Logos auf grünen Kacheln, deren Farben über das Raster hinweg von leuchtenden Farben zu Graustufen übergehen
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)

Legt die hochwertige Konturierung auf „ enabled “ fest. Die Einstellung „ true “ sorgt in einigen selteneren Fällen, in denen sich Konturen überlappen und keine volle Deckkraft aufweisen, für eine korrektere Darstellung. Die Aktivierung dieser Option führt zu einem höheren Rendering-Aufwand. Der Standardwert ist „ 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)

Legt das Linienende für Striche auf „ cap “ fest. Die Standard-Linienendform ist „ QCanvasPainter::LineCap::Butt “.

Drei horizontale Linien mit stumpfen, eckigen und runden Linienabschlüssen
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)

Legt den Linienanschluss der Striche auf „ join “ fest. Der Standard-Linienanschluss ist „ QCanvasPainter::LineJoin::Miter “.

Drei Zickzack-Verläufe, die Gehrungs-, Abschrägungs- und Rundverbindungen zeigen
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);

Siehe auch setMiterLimit().

void QCanvasPainter::setLineWidth(qreal width)

Legt die Linienbreite der Striche auf width in Pixeln fest. Die Standard-Linienbreite beträgt 1.0. Wenn die Kantenglättung aktiviert ist, wird bei Breiten, die dünner als ein einzelnes Pixel sind, die Deckkraft automatisch ausgeblendet, wodurch eine glatte Darstellung entsteht.

Eine Reihe von wellenförmigen Kurven, die mit zunehmend breiter werdenden Linien gezeichnet sind
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();
}

Siehe auch stroke().

void QCanvasPainter::setMiterLimit(qreal limit)

Legt den Gehrungsgrenzwert auf „ limit “ fest. Der Gehrungsgrenzwert bestimmt, wann eine scharfe Ecke abgeschrägt wird. Wenn die Ecklänge diesen Grenzwert überschreiten würde, wird stattdessen zwischen den Linien eine „ QCanvasPainter::LineJoin::Bevel “ angewendet. Dies wirkt sich nur bei der Linienverbindung „ QCanvasPainter::LineJoin::Miter “ aus. Der Standardgrenzwert ist „ 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);

Siehe auch „ setLineJoin()“.

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

Setzt den aktuellen Teilpfad „ winding “ entweder auf „ CounterClockWise “ (Standard) oder auf „ ClockWise “. „ CounterClockWise “ zeichnet geschlossene Teilpfade, während „ ClockWise “ Löcher zeichnet.

Grünes, abgerundetes Quadrat mit einem kleinen Kreis und einem Rechteck, die als Löcher ausgestanzt sind
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();

Siehe auch beginHoleSubPath() und beginSolidSubPath().

void QCanvasPainter::setStrokeStyle(QColor color)

Legt den Strichstil auf „ color “ fest. Der Standard-Strichstil ist ein durchgezogener schwarzer Strich (0, 0, 0, 1).

Drei ineinander verschachtelte quadratische Umrisse in Schwarz, Dunkelblaugrün und Grün
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)

Setzt den Strichstil auf „ brush “. Der Standard-Strichstil ist durchgehend schwarz (0, 0, 0, 1).

Zwei ineinander verschachtelte quadratische Umrisse mit diagonalen Farbverläufen von Grün nach Schwarz und von Grün nach Gelb
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);

Dies ist eine überladene Funktion.

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

Legt die horizontale Ausrichtung des Textes auf „ align “ fest. Die Standardausrichtung ist „ QCanvasPainter::TextAlign::Start “.

Die Beschriftungen „Links“, „Mitte“, „Rechts“, „Start“ und „Ende“ sind um eine vertikale Referenzlinie herum angeordnet
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);

Siehe auch setTextBaseline().

void QCanvasPainter::setTextAntialias(qreal antialias)

Legt den aktuellen Grad der Textglättung fest. Der Wert „ antialias “ ist ein Multiplikator für die normale Textglättung, d. h., „ 0.0 “ deaktiviert die Textglättung und „2,0“ verdoppelt sie. Der Standardwert ist 1,0.

Hinweis: Aufgrund der verwendeten Technik zur Textglättung (SDF) ist der maximale Glättungsgrad recht begrenzt, was sich bei kleinen Schriftgrößen weniger stark bemerkbar macht.

Die mit „Antialiasing 1.0“ bis „4.0“ beschrifteten Linien werden zunehmend weicher und unschärfer.
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)

Legt die vertikale Ausrichtung (Grundlinie) des Textes auf „ baseline “ fest. Die Standardausrichtung ist „ QCanvasPainter::TextBaseline::Alphabetic “.

Beschriftungen „Unten“, „Mitte“, „Oben“, „Alphabetisch“ und „Hängend“, ausgerichtet an horizontalen Grundlinien
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);

Siehe auch ` setTextAlign()`.

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

Legt die Textrichtung auf „ direction “ fest. Die Standardrichtung ist „ 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)

Legt die Zeilenhöhe für umgebrochenen Text in Pixeln auf „ height “ fest. Die Standard-Zeilenhöhe beträgt „ 0 “.

Zweizeiliger Text in drei Feldern mit den Zeilenabständen -10, 0 und 10 Pixel
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)

Stellt den Textumbruchmodus auf „ wrapMode “ ein. Der Standard-Umbruchmodus ist „ QCanvasPainter::WrapMode::NoWrap “.

Derselbe Text in drei Feldern, in denen kein Zeilenumbruch, ein Wortumbruch bzw. ein beliebiger Zeilenumbruch angezeigt wird
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)

Setzt die aktuelle Transformation zurück und verwendet stattdessen „ transform “.

Kleines grünes, abgerundetes Quadrat über einem größeren, gedrehten und vergrößerten, abgerundeten Quadrat
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();

Siehe auch transform().

void QCanvasPainter::setWindingEnforce(bool enabled)

Legt die Windungsrichtung auf „ enabled “ fest. Durch die Einstellung „ false “ wird die Erzwingung der Pfadwindung deaktiviert, sodass die Einstellung in „ setPathWinding()“ übernommen wird. Durch die Deaktivierung können beispielsweise Löcher in Pfade erstellt werden, indem die Punkte im Uhrzeigersinn hinzugefügt werden. Die Deaktivierung kann zudem die Leistung steigern. Der Standardwert ist „ 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)

Verschiebt (verzerrt) das aktuelle Koordinatensystem entlang der X-Achse um angleX und entlang der Y-Achse um angleY. Die Winkel werden in Radianten angegeben.

Grünes, abgerundetes Rechteck mit dem Text „Cute!“, der zu einem Parallelogramm verzerrt ist
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()

Zeichnet den aktuellen Pfad mit dem aktuellen Strichstil nach.

Zwei vertikale Balkenumrisse mit einem darüberliegenden Kreisumriss
p->beginPath();
p->rect(20, 20, 40, 160);
p->rect(140, 20, 40, 160);
p->circle(100, 100, 60);
p->stroke();

Siehe auch „ setStrokeStyle()“.

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

Zeichnet den Pfad „ path “ mit dem aktuellen Strichstil und ordnet ihn „ pathGroup “ zu. Das Zeichnen über „ QCanvasPath “ ist optimal, wenn der Pfad mehr Befehle enthält und weitgehend statisch ist.

Wenn „ pathGroup “ auf „ -1 “ gesetzt ist, werden die rendernbezogenen Daten des Pfades nicht zwischengespeichert. Dies ist die Standardeinstellung. Um die Zwischenspeicherung von Pfaddaten zu erzwingen, übergeben Sie einen Wert, der gleich oder größer als „ 0 “ ist. Weitere Informationen zur Verwendung von Pfad-Cache-Gruppen finden Sie in der Dokumentation unter „ QCanvasPath “.

Der Aufruf von ` beginPath()` vor dieser Methode ist nicht erforderlich.

Reihe schmaler vertikaler Balkenumrisse unterschiedlicher Höhe
// 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);

Dies ist eine überladene Funktion.

Siehe auch „ setStrokeStyle()“ und „ removePathGroup()“.

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

Zeichnet ein umrandetes Rechteck an der angegebenen Position ( x, y) mit der Größe width, height.

Hinweis: Diese Funktion dient der Vereinfachung. Wenn Sie mehr als nur ein Rechteck mit Umrandung zeichnen möchten, verwenden Sie vorzugsweise ` rect()`.

Dunkelblaugrüner quadratischer Umriss
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)

Zeichnet ein umrandetes Rechteck in „ rect “. Hierbei handelt es sich um eine überladene Methode, die „ QRectF “ verwendet.

Hinweis: Diese Funktion dient der Vereinfachung. Wenn Sie mehr als nur ein Rechteck mit Umrandung zeichnen möchten, verwenden Sie vorzugsweise ` rect()`.

Dies ist eine überladene Funktion.

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

Misst die Begrenzungsbox einer Zeichenkette vom Typ „ text “ an den Koordinaten (x, y).

Um mehrzeiligen Text zu messen, setzen Sie den Zeilenumbruchmodus mit ` setTextWrapMode()` auf einen anderen Wert als den Standardwert ` NoWrap`. Setzen Sie außerdem den optionalen Parameter ` maxWidth ` auf die gewünschte Zeilenbreite in Pixeln.

Gibt ` QRectF ` mit den Werten [xmin, ymin, width, height] zurück. Die gemessenen Werte werden im lokalen Koordinatensystem zurückgegeben.

Mit Qt erstellter Text, der in einer Zeile angezeigt und auf zwei Zeilen umgebrochen wird, wobei jede Zeile in ihrem eigenen, festgelegten Begrenzungsrahmen erscheint
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

Misst den Begrenzungsrahmen einer Zeichenkette vom Typ „ text “ unter rect. Gibt „ QRectF “ mit den Werten [xmin, ymin, width, height] zurück. Die gemessenen Werte werden im lokalen Koordinatensystem zurückgegeben.

Dies ist eine überladene Funktion.

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

Misst die Begrenzungsbox einer „ text “-Zeichenkette unter point.

Um mehrzeiligen Text zu messen, legen Sie den Zeilenumbruchmodus mit ` setTextWrapMode()` auf einen anderen Wert als den Standardwert ` NoWrap` fest. Setzen Sie außerdem den optionalen Parameter ` maxWidth ` auf die gewünschte Zeilenbreite in Pixeln.

Gibt ` QRectF ` mit den Werten [xmin, ymin, width, height] zurück. Die gemessenen Werte werden im lokalen Koordinatensystem zurückgegeben.

Dies ist eine überladene Funktion.

void QCanvasPainter::transform(const QTransform &transform)

Multipliziert das aktuelle Koordinatensystem mit dem angegebenen Skalierungsfaktor ` transform`.

Zehn grüne, abgerundete Balken, die durch wiederholte Drehung um einen Mittelpunkt ringförmig angeordnet sind
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();
}

Siehe auch ` setTransform()`.

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

Verschiebt das aktuelle Koordinatensystem um x und y.

Zwei identische grüne, abgerundete Rechtecke, wobei das untere um die Verschiebung nach unten versetzt ist
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)

Verschiebt das aktuelle Koordinatensystem um point.

Dies ist eine überladene Funktion.

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