QCanvasCustomBrush Class
QCanvasCustomBrush ist ein Pinsel mit benutzerdefinierten Shadern. Mehr...
| Kopfzeile: | #include <QCanvasCustomBrush> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| Seit: | Qt 6.11 |
| Erbt: | QCanvasBrush |
| Status: | Technische Vorschau |
Öffentliche Funktionen
| QCanvasCustomBrush() | |
| QCanvasCustomBrush(const QString &fragmentShader, const QString &vertexShader = {}) | |
| ~QCanvasCustomBrush() | |
| void | setData1(const QVector4D &data) |
| void | setData2(const QVector4D &data) |
| void | setData3(const QVector4D &data) |
| void | setData4(const QVector4D &data) |
| void | setFragmentShader(const QShader &fragmentShader) |
| void | setFragmentShader(const QString &fragmentShader) |
| void | setTimeRunning(bool running) |
| void | setVertexShader(const QShader &vertexShader) |
| void | setVertexShader(const QString &vertexShader) |
| bool | timeRunning() const |
| operator QVariant() const |
Verwandte Nicht-Mitglieder
| bool | operator!=(const QCanvasCustomBrush &lhs, const QCanvasCustomBrush &rhs) |
| bool | operator==(const QCanvasCustomBrush &lhs, const QCanvasCustomBrush &rhs) |
Detaillierte Beschreibung
QCanvasCustomBrush ist ein Strich-/Füllpinsel mit eigenen Vertex- und/oder Fragment-Shadern.
Es wird erwartet, dass diese Shader in GLSL im Vulkan-Stil geschrieben werden, ähnlich wie die Qt Quick ShaderEffect Shader. Sie müssen immer eine QC_INCLUDE -Anweisung enthalten, entweder mit "customfrag.glsl" oder "customvert.glsl". Dadurch werden ein einheitlicher Block, die Bild- und Schrifttexturen und ein paar Hilfsfunktionen verfügbar.
Im Folgenden finden Sie ein einfaches Beispiel für einen benutzerdefinierten Fragment-Shader:
#version 440 QC_INCLUDE "customfrag.glsl" void main() { float a = 0.6 + 0.2 * sin(0.1 * fragCoord.x + 4.0 * iTime); vec4 color = vec4(a, a, a, 1.0); fragColor = sdfFontAlpha() * globalAlpha * color; applyColorEffects(fragColor); }
iTime ist ein Beispiel für ein häufig verwendetes Element im eingebauten Uniform-Block. Der Aufruf von setTimeRunning() mit true sorgt dafür, dass dieser Wert automatisch bei jedem Bild aktualisiert wird, und kann zur Steuerung animierter Inhalte verwendet werden.
Shader, die mit QCanvasCustomBrush verwendet werden, müssen dem Anwendungsprojekt immer über die qc_add_shaders() CMake-Funktion hinzugefügt werden, die vom Qt Canvas Painter-Paket bereitgestellt wird. Diese Funktion führt zur Erstellungszeit zusätzliche Vorverarbeitungen durch, bevor sie intern die Standardfunktion qt_add_shaders() aufruft.
Ein Beispiel:
qc_add_shaders(app "app_custombrush_shaders" PREFIX "/shaders" FILES brush1.frag )
Zur Laufzeit kann die generierte .qsb Datei zum Beispiel so verwendet werden:
QCanvasCustomBrush customBrush(":/shaders/brush1.frag.qsb")); customBrush.setTimeRunning(true); // iTime updates automatically // expose custom data to the shader in data1 customBrush.setData1(QVector4D(1.0, 2.0, 3.0, 4.0));
Der QCanvasCustomBrush kann dann z.B. in einer Füllung verwendet werden:
painter->setFillStyle(customBrush);
Siehe auch Qt Canvas Painter - Galerie Beispiel.
Dokumentation der Memberfunktionen
QCanvasCustomBrush::QCanvasCustomBrush()
Konstruiert einen benutzerdefinierten Standardpinsel.
QCanvasCustomBrush::QCanvasCustomBrush(const QString &fragmentShader, const QString &vertexShader = {})
Konstruiert einen benutzerdefinierten Pinsel.
Der Fragment-Shader ist fragmentShader und der Vertex-Shader ist vertexShader. Dieser Konstruktor nimmt zwei Dateinamen an, wobei beide Dateien .qsb Dateien sein müssen, die gelesen und in QShader Objekte deserialisiert werden. Die Dateien können eine lokale Datei sein oder über das Qt Resource System in die Anwendung eingebettet werden.
Wenn nichts angegeben wird, ist vertexShader standardmäßig ein leerer String, was bedeutet, dass der Standard-Shader für die Vertex-Stufe verwendet wird. Es ist auch möglich, einen leeren String als fragmentShader zu übergeben, und nur einen benutzerdefinierten Shader für vertexShader bereitzustellen.
Siehe auch setFragmentShader und setVertexShader.
[noexcept] QCanvasCustomBrush::~QCanvasCustomBrush()
Zerstört den benutzerdefinierten Pinsel.
void QCanvasCustomBrush::setData1(const QVector4D &data)
Setzt den einheitlichen Wert von data1 auf data. Dadurch können benutzerdefinierte Daten in Shadern eingestellt werden.
void QCanvasCustomBrush::setData2(const QVector4D &data)
Setzt den einheitlichen data2-Wert auf data. Dadurch können benutzerdefinierte Daten in Shadern eingestellt werden.
void QCanvasCustomBrush::setData3(const QVector4D &data)
Setzt den Wert für einheitliche Daten3 auf data. Dadurch können benutzerdefinierte Daten in Shadern eingestellt werden.
void QCanvasCustomBrush::setData4(const QVector4D &data)
Setzt den Wert für einheitliche Daten4 auf data. Dadurch können benutzerdefinierte Daten in Shadern eingestellt werden.
void QCanvasCustomBrush::setFragmentShader(const QShader &fragmentShader)
Legt den zu verwendenden benutzerdefinierten Pinsel fest fragmentShader.
void QCanvasCustomBrush::setFragmentShader(const QString &fragmentShader)
Legt den benutzerdefinierten Pinsel fest, der fragmentShader verwendet. Dies muss ein Pfad zu einer gültigen qsb-Datei sein. Die Datei kann eine lokale Datei sein oder über das Qt Resource System in die Anwendung eingebettet werden.
void QCanvasCustomBrush::setTimeRunning(bool running)
Setzt den Zeitablaufstatus auf running. Wenn dies der Fall ist, wird die Shader-Uniform iTime automatisch aktualisiert und kann verwendet werden, um die aktuelle Animationslaufzeit im Shader zu erhalten.
Der Standardwert ist false.
Siehe auch timeRunning().
void QCanvasCustomBrush::setVertexShader(const QShader &vertexShader)
Legt den zu verwendenden benutzerdefinierten Pinsel fest vertexShader.
void QCanvasCustomBrush::setVertexShader(const QString &vertexShader)
Legt den benutzerdefinierten Pinsel fest, der vertexShader verwendet. Dies muss ein Pfad zu einer gültigen qsb-Datei sein. Die Datei kann eine lokale Datei sein oder über das Qt Resource System in die Anwendung eingebettet werden.
bool QCanvasCustomBrush::timeRunning() const
Gibt true zurück, wenn die Zeit läuft.
Siehe auch setTimeRunning().
QCanvasCustomBrush::operator QVariant() const
Gibt den benutzerdefinierten Pinsel als QVariant zurück.
Verwandte Nicht-Mitglieder
[noexcept] bool operator!=(const QCanvasCustomBrush &lhs, const QCanvasCustomBrush &rhs)
Gibt true zurück, wenn sich der benutzerdefinierte Pinsel lhs von rhs unterscheidet; andernfalls false.
Siehe auch operator==().
[noexcept] bool operator==(const QCanvasCustomBrush &lhs, const QCanvasCustomBrush &rhs)
Gibt true zurück, wenn der benutzerdefinierte Pinsel lhs gleich rhs ist; andernfalls false.
Siehe auch operator!=().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.