QCanvasCustomBrush Class
QCanvasCustomBrush 是一种带有自定义着色器的画笔。更多
| Header: | #include <QCanvasCustomBrush> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| 自 | Qt 6.11 |
| 继承于 | QCanvasBrush |
| 状态: | 技术预览版 |
公共函数
| 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) |
详细说明
QCanvasCustomBrush 是一种带有自定义顶点和/或片段着色器的描边/填充画笔。
这些着色器应使用 Vulkan 风格的 GLSL 编写,类似于Qt Quick ShaderEffect 着色器。这些着色器必须始终包含QC_INCLUDE 语句,可以是"customfrag.glsl" 或"customvert.glsl" 。这样就可以使用统一块、图像和字体纹理以及一些辅助函数。
下面是一个自定义片段着色器的简单示例:
#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 是内置 uniform 块中一个常用成员的示例。使用true 调用setTimeRunning() 将使该值每帧自动更新,并可用于驱动动画内容。
与 QCanvasCustomBrush 一起使用的着色器必须始终通过qc_add_shaders() CMake 函数添加到应用程序项目中,该函数由 Qt Canvas Painter 软件包提供。该函数在内部调用标准qt_add_shaders() 之前,会在构建时执行额外的预处理。
举例来说:
qc_add_shaders(app "app_custombrush_shaders" PREFIX "/shaders" FILES brush1.frag )
运行时,生成的.qsb 文件可用于以下示例:
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));
然后就可以在填充中使用 QCanvasCustomBrush:
painter->setFillStyle(customBrush);
另请参阅 Qt Canvas Painter - 画廊示例。
成员函数文档
QCanvasCustomBrush::QCanvasCustomBrush()
构建默认的自定义笔刷。
QCanvasCustomBrush::QCanvasCustomBrush(const QString &fragmentShader, const QString &vertexShader = {})
构建自定义笔刷。
片段着色器为fragmentShader ,顶点着色器为vertexShader 。该构造函数接收两个文件名,其中两个文件都应是.qsb 文件,并被读取和反序列化为QShader 对象。文件可以是本地文件,也可以通过Qt 资源系统嵌入到应用程序中。
未指定时,vertexShader 默认为空字符串,这意味着顶点阶段使用默认的标准着色器。也可以传递空字符串作为fragmentShader ,只为vertexShader 提供自定义着色器。
另请参见 setFragmentShader 和setVertexShader 。
[noexcept] QCanvasCustomBrush::~QCanvasCustomBrush()
销毁自定义笔刷。
void QCanvasCustomBrush::setData1(const QVector4D &data)
将统一数据 1 的值设置为data 。这样就可以在着色器中设置自定义数据。
void QCanvasCustomBrush::setData2(const QVector4D &data)
将统一数据 2 设置为data 。这样就可以在着色器中设置自定义数据。
void QCanvasCustomBrush::setData3(const QVector4D &data)
将统一数据 3 的值设置为data 。这样就可以在着色器中设置自定义数据。
void QCanvasCustomBrush::setData4(const QVector4D &data)
将统一数据 4 值设置为data 。这样就可以在着色器中设置自定义数据。
void QCanvasCustomBrush::setFragmentShader(const QShader &fragmentShader)
设置要使用的自定义画笔fragmentShader 。
void QCanvasCustomBrush::setFragmentShader(const QString &fragmentShader)
设置要使用的自定义画笔fragmentShader 。这必须是一个有效 qsb 文件的路径。该文件可以是本地文件,也可以通过Qt 资源系统嵌入到应用程序中。
void QCanvasCustomBrush::setTimeRunning(bool running)
将时间运行状态设置为running 。为真时,着色器统一iTime 会自动更新,并可用于获取着色器中当前的动画运行时间。
默认值为false 。
另请参见 timeRunning().
void QCanvasCustomBrush::setVertexShader(const QShader &vertexShader)
设置要使用的自定义画笔vertexShader 。
void QCanvasCustomBrush::setVertexShader(const QString &vertexShader)
设置要使用的自定义画笔vertexShader 。这必须是一个有效 qsb 文件的路径。该文件可以是本地文件,也可以通过Qt 资源系统嵌入到应用程序中。
bool QCanvasCustomBrush::timeRunning() const
如果时间正在运行,则返回 true。
另请参阅 setTimeRunning().
QCanvasCustomBrush::operator QVariant() const
以QVariant 的形式返回自定义笔刷。
相关非会员
[noexcept] bool operator!=(const QCanvasCustomBrush &lhs, const QCanvasCustomBrush &rhs)
如果自定义笔刷lhs 与rhs 不同,则返回true ;否则返回false 。
另请参阅 operator==().
[noexcept] bool operator==(const QCanvasCustomBrush &lhs, const QCanvasCustomBrush &rhs)
如果自定义笔刷lhs 等于rhs ,则返回true ;否则返回false 。
另请参阅 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.