En esta página

QCanvasCustomBrush Class

QCanvasCustomBrush es un pincel con shaders personalizados. Más...

Cabecera: #include <QCanvasCustomBrush>
CMake: find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter)
Desde: Qt 6.11
Hereda de: QCanvasBrush
Estado: Technical Preview

Funciones públicas

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
bool operator!=(const QCanvasCustomBrush &lhs, const QCanvasCustomBrush &rhs)
bool operator==(const QCanvasCustomBrush &lhs, const QCanvasCustomBrush &rhs)

Descripción Detallada

QCanvasCustomBrush es un pincel de trazo/relleno con shaders personalizados de vértices y/o fragmentos.

Se espera que estos shaders estén escritos en GLSL estilo Vulkan, de forma similar a los shaders de Qt Quick ShaderEffect . Siempre deben contener una declaración QC_INCLUDE, ya sea con "customfrag.glsl" o "customvert.glsl". Esto pone a disposición un bloque uniforme, las texturas de imagen y fuente, y algunas funciones de ayuda.

A continuación se muestra un ejemplo sencillo de un fragment shader personalizado:

#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 es un ejemplo de un miembro comúnmente utilizado en el bloque uniforme incorporado. Llamar a setTimeRunning() con true hará que este valor se actualice automáticamente cada fotograma, y se puede utilizar para manejar contenido animado.

Los shaders que se utilizan con QCanvasCustomBrush siempre deben añadirse al proyecto de aplicación a través de la función qc_add_shaders() CMake, proporcionada por el paquete Qt Canvas Painter. Esta función realiza un preprocesamiento adicional en tiempo de compilación antes de invocar internamente el estándar qt_add_shaders().

Por ejemplo:

qc_add_shaders(app "app_custombrush_shaders"
    PREFIX
        "/shaders"
    FILES
        brush1.frag
)

En tiempo de ejecución, el archivo .qsb generado se puede utilizar por ejemplo así:

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

El QCanvasCustomBrush puede entonces ser utilizado en un relleno, por ejemplo:

painter->setFillStyle(customBrush);

Véase también Qt Canvas Painter - Ejemplo de Galería.

Documentación de Funciones Miembro

QCanvasCustomBrush::QCanvasCustomBrush()

Construye un pincel personalizado por defecto.

QCanvasCustomBrush::QCanvasCustomBrush(const QString &fragmentShader, const QString &vertexShader = {})

Construye un pincel personalizado.

El fragment shader es fragmentShader y el vertex shader es vertexShader. Este constructor toma dos nombres de archivo, donde se espera que ambos archivos sean archivos .qsb que son leídos y deserializados en objetos QShader. Los archivos pueden ser un archivo local o incrustado en la aplicación a través del Sistema de Recursos Qt.

Cuando no se especifica, vertexShader por defecto es una cadena vacía, lo que implica que se utiliza el shader estándar por defecto para la etapa de vértices. También es posible pasar una cadena vacía como fragmentShader, y sólo proporcionar un shader personalizado para vertexShader.

Véase también setFragmentShader y setVertexShader.

[noexcept] QCanvasCustomBrush::~QCanvasCustomBrush()

Destruye el pincel personalizado.

void QCanvasCustomBrush::setData1(const QVector4D &data)

Establece el valor de datos1 uniforme en data. Esto permite establecer datos personalizados en los shaders.

void QCanvasCustomBrush::setData2(const QVector4D &data)

Establece el valor de datos2 uniforme en data. Esto permite establecer datos personalizados en los shaders.

void QCanvasCustomBrush::setData3(const QVector4D &data)

Establece el valor de datos3 uniformes en data. Esto permite establecer datos personalizados en los sombreadores.

void QCanvasCustomBrush::setData4(const QVector4D &data)

Establece el valor de datos uniformes4 en data. Esto permite establecer datos personalizados en los sombreadores.

void QCanvasCustomBrush::setFragmentShader(const QShader &fragmentShader)

Establece el pincel personalizado que se utilizará fragmentShader.

void QCanvasCustomBrush::setFragmentShader(const QString &fragmentShader)

Establece el pincel personalizado a utilizar fragmentShader. Debe ser la ruta a un archivo qsb válido. El archivo puede ser un archivo local o incrustado en la aplicación a través de The Qt Resource System.

void QCanvasCustomBrush::setTimeRunning(bool running)

Establece el estado de tiempo de ejecución en running. Cuando esto es cierto, el shader uniforme iTime se actualiza automáticamente, y puede ser utilizado para obtener el tiempo de ejecución de la animación actual en el shader.

El valor por defecto es false.

Ver también timeRunning().

void QCanvasCustomBrush::setVertexShader(const QShader &vertexShader)

Establece el pincel personalizado que se utilizará vertexShader.

void QCanvasCustomBrush::setVertexShader(const QString &vertexShader)

Establece el pincel personalizado a utilizar vertexShader. Debe ser la ruta a un archivo qsb válido. El archivo puede ser un archivo local o incrustado en la aplicación a través de The Qt Resource System.

bool QCanvasCustomBrush::timeRunning() const

Devuelve true si el tiempo está corriendo.

Véase también setTimeRunning().

QCanvasCustomBrush::operator QVariant() const

Devuelve el pincel personalizado como QVariant.

Relacionados No miembros

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

Devuelve true si el pincel personalizado lhs es diferente de rhs; false en caso contrario.

Véase también operator==().

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

Devuelve true si el pincel personalizado lhs es igual a rhs; false en caso contrario.

Véase también 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.