QCanvasPainter Class
QCanvasPainter 类在QRhi 上执行硬件加速绘制。更多内容...
| 标题: | #include <QCanvasPainter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter) target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| 自: | Qt 6.11 |
公共类型
| 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 } |
公共函数
| 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) |
详细说明
Qt 画布绘制器 (QCanvasPainter) 提供了一套针对硬件加速(GPU)绘制进行优化的绘制 API。该 API 严格遵循 HTML Canvas 2D 上下文规范,并移植到了 Qt C++ 环境中。它还受到了QPainter 的影响,但 API 设计更为紧凑。
以下是一个使用 QCanvasPainter 创建圆形按钮的简单示例。
![]() | |
以下是绘制简单图形的另一个示例。
![]() | |
功能
总体而言,从命名规范的角度来看,QCanvasPainter 遵循 HTML Canvas 2D 上下文规范(https://html.spec.whatwg.org/multipage/canvas.html#2dcontext)。 这使得许多开发者对该 API 感到熟悉,并且能够轻松复用现有的 canvas 代码。但其目标并非与 HTML canvas 实现 100% 兼容。 QCanvasPainter 省略了部分功能,以使其更简洁、在QRhi 硬件加速图形 API 上性能更佳,并更好地满足现代 UI 的需求。正因如此,与 HTML Canvas 2D 上下文相比,QCanvasPainter 还具备一些额外功能。
以下是与 HTML Canvas 相比,目前至少尚不支持的部分功能:
- 裁剪:所有裁剪均为(经过变换的)矩形,不支持对路径形状进行裁剪。
- 虚线:描边始终为实线,不支持虚线/点线描边样式。
- 路径检测:没有 isPointInPath() 或 isPointInStroke() 方法。
- 文本描边:不支持文本的轮廓描边。
- 滤镜:不支持 Canvas SVG 滤镜效果。
- 合成模式:合成模式的数量限制为 3 种,且无需渲染到额外的缓冲区即可支持。
- 阴影:不支持内置的阴影方法。
另一方面,与 HTML Canvas 相比,QCanvasPainter 提供了一些额外功能,包括:
- 路径组:QCanvasPainter 允许在静态路径上绘制,并将这些路径作为组进行缓存,以实现 GPU 的最优利用。
- 可调节的抗锯齿:得益于路径顶点抗锯齿和 SDF 文本渲染,可以自由调整抗锯齿的像素数量,以实现更平滑的绘制效果。
- 矩形渐变:除了线性、径向和锥形渐变外,QCanvasPainter 还支持圆角矩形渐变。
- 盒阴影:QCanvasPainter 还支持 CSS box-shadow 类型的画笔。其渲染采用类似于Qt Quick RectangularShadow 的 SDF 方法,因此性能非常出色。
- 网格图案:QCanvasPainter 支持QCanvasGridPattern 实现动态网格和条纹图案样式。
- 自定义画笔:QCanvasPainter 还允许使用自定义顶点着色器和片段着色器(QCanvasCustomBrush )进行填充和描边。这些自定义画笔也可用于文本。
- 文本换行:QCanvasPainter 支持将文本自动换行为多行,并提供多种换行模式。
- 颜色效果:除了 globalAlpha 之外,QCanvasPainter 还支持全局亮度、对比度和饱和度。
- 着色图像:QCanvasPainter 为绘制图像和图像图案增加了着色支持。
QCanvasPainter 与架构无关,既可用于Qt Quick 应用程序,也可用于Qt Widgets 应用程序。实际上,即使不使用上述任何一种,仅通过QWindow 和QRhi 也能使用它。要使用 QCanvasPainter,请根据应用程序的架构,从以下类之一调用它:
- Qt Quick: 使用QCanvasPainterItem 和QCanvasPainterItemRenderer 。
- Qt Widgets: 使用QCanvasPainterWidget 。
- QRhi基于QWindow 的,或基于离屏QRhi 缓冲区的:请使用QCanvasPainterFactory 和QCanvasRhiPaintDriver 。
描边规则
QCanvasPainter 默认使用NonZero ({Qt::WindingFill}) 填充规则。若要根据路径点方向选择填充方式,请通过调用setWindingEnforce(false) 禁用强制绕行。
![]() | |
不过,更常见的情况是依赖绕行强制规则,并通过setPathWinding() 或beginHoleSubPath() 以及beginSolidSubPath() 辅助函数设置首选绕行方式。
![]() | |
成员类型文档
enum class QCanvasPainter::CompositeOperation
Qt Canvas Painter 支持 3 种合成操作:
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::CompositeOperation::SourceOver | 0 | 默认值。将新图形绘制在现有内容之上。 |
QCanvasPainter::CompositeOperation::SourceAtop | 1 | 新图形仅在其与现有内容重叠的区域内绘制。 |
QCanvasPainter::CompositeOperation::DestinationOut | 2 | 在不与新图形重叠的位置,将保留现有内容。 |
另请参阅 setGlobalCompositeOperation()。
[since 6.12] enum class QCanvasPainter::FillRule
此枚举指定路径的填充方式。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::FillRule::NonZero | 0 | 路径采用“非零绕行规则”进行填充。根据该规则,我们通过以下方法判断一个点是否位于图形内部:从该点向图形外部绘制一条水平线,并判断该线在每个交点处的方向是向上还是向下。 通过将每个交点的方向求和来确定环绕数。如果该数值不为零,则该点位于图形内部。在大多数情况下,此填充模式也可视为闭合图形的交集。此模式为默认模式。 |
QCanvasPainter::FillRule::EvenOdd | 1 | 路径采用奇偶填充规则进行填充。根据该规则,我们通过以下方法判断一个点是否位于形状内部:从该点向形状外部绘制一条水平线,并统计交点数量。如果交点数量为奇数,则该点位于形状内部。 |
该枚举类型在 Qt 6.12 中引入。
另请参阅 fill()。
enum class QCanvasPainter::ImageFlag
flags QCanvasPainter::ImageFlags
此枚举指定了与图像相关的标志。请配合addImage() 使用以设置这些标志。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::ImageFlag::GenerateMipmaps | 1 << 0 | 设置此选项可为图像生成Mipmap。当需要对缩小至原始尺寸以下的图像生成更平滑的输出时,应使用Mipmap。 |
QCanvasPainter::ImageFlag::RepeatX | 1 << 1 | 与图像图案配合使用,可在 X 坐标方向上重复图像。 |
QCanvasPainter::ImageFlag::RepeatY | 1 << 2 | 与图像图案配合使用,可在 Y 坐标方向上重复图像。 |
QCanvasPainter::ImageFlag::Repeat | RepeatX | RepeatY | 与图像图案配合使用,可在两个坐标轴上重复图像。 |
QCanvasPainter::ImageFlag::FlipY | 1 << 3 | 渲染时沿 Y 方向翻转(反转)图像。 |
QCanvasPainter::ImageFlag::Premultiplied | 1 << 4 | 图像数据已预乘了透明度(alpha)。 |
QCanvasPainter::ImageFlag::Nearest | 1 << 5 | 图像插值方式为“最近邻”而非“线性” |
ImageFlags 类型是QFlags<ImageFlag> 的 typedef。它存储 ImageFlag 值的按“或”运算组合。
enum class QCanvasPainter::LineCap
LineCap 用于定义线条末端(线端)的绘制方式。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::LineCap::Butt | 0 | (默认)方形线端,不覆盖线的终点。 |
QCanvasPainter::LineCap::Round | 1 | 圆角线端。 |
QCanvasPainter::LineCap::Square | 2 | 方形线端,覆盖线端点并向外延伸半个线宽。 |
另请参阅 setLineCap()。
enum class QCanvasPainter::LineJoin
LineJoin 用于定义两条相连线段之间的连接线如何绘制。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::LineJoin::Round | 0 | 两条线之间的圆弧被填充。 |
QCanvasPainter::LineJoin::Bevel | 1 | 两条线之间的三角形缺口被填充。 |
QCanvasPainter::LineJoin::Miter | 2 | (默认)两条线的外边缘延伸至相交成一角,并填充该区域。 |
另请参阅 setLineJoin() 和setMiterLimit()。
enum class QCanvasPainter::PathConnection
在某些绘图方法中,PathConnection 用于指定新路径是否应与前一条路径的最后一点连接。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::PathConnection::NotConnected | 0 | 不会从上一个路径的最后一点到当前路径的第一点绘制线条。 |
QCanvasPainter::PathConnection::Connected | 1 | 将前一条路径的最后一点与当前路径的第一点连接起来。 |
另请参阅 arc()。
enum class QCanvasPainter::PathWinding
PathWinding 用于指定路径绘制的方向。该方向用于确定子路径在路径中是实线还是空心。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::PathWinding::CounterClockWise | 0 | (默认)实心形状采用逆时针绕行。 |
QCanvasPainter::PathWinding::ClockWise | 1 | 对于孔,采用顺时针绕行。 |
另请参阅 setPathWinding()。
enum class QCanvasPainter::TextAlign
TextAlign 用于定义文本的水平对齐方式。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::TextAlign::Left | 0 | 将文本的左侧水平对齐到指定位置。 |
QCanvasPainter::TextAlign::Right | 1 | 将文本的右侧水平对齐到指定位置。 |
QCanvasPainter::TextAlign::Center | 2 | 将文本中心水平对齐到指定位置。 |
QCanvasPainter::TextAlign::Start | 3 | (默认)文本对齐于行首(对于从左到右的区域设置,为左对齐;对于从右到左的区域设置,为右对齐)。 |
QCanvasPainter::TextAlign::End | 4 | 文本对齐于行尾的正常位置(对于从左到右的语言环境,为右对齐;对于从右到左的语言环境,为左对齐)。 |
另请参阅 setTextAlign()、setTextDirection() 和fillText()。
enum class QCanvasPainter::TextBaseline
TextBaseline 用于定义文本的垂直对齐方式(基线对齐)。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::TextBaseline::Top | 0 | 将文本顶部垂直对齐到指定位置。 |
QCanvasPainter::TextBaseline::Hanging | 1 | 将文本的悬挂基线垂直对齐到指定位置。 |
QCanvasPainter::TextBaseline::Middle | 2 | 将文本的中间位置垂直对齐到指定位置。 |
QCanvasPainter::TextBaseline::Alphabetic | 3 | (默认) 将文本的基线垂直对齐到指定位置。 |
QCanvasPainter::TextBaseline::Bottom | 4 | 将文本底部垂直对齐到指定位置。 |
另请参阅 setTextBaseline() 和fillText()。
enum class QCanvasPainter::TextDirection
TextDirection 用于定义文本的水平对齐方式。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::TextDirection::LeftToRight | 0 | 文本方向为从左到右。 |
QCanvasPainter::TextDirection::RightToLeft | 1 | 文本方向为从右到左。 |
QCanvasPainter::TextDirection::Inherit | 2 | (默认)文本方向从QGuiApplication layoutDirection 继承。请参阅 https://doc.qt.io/qt-6/qguiapplication.html#layoutDirection-prop。 |
QCanvasPainter::TextDirection::Auto | 3 | 文本方向将根据文本字符串自动检测。参见QString::isRightToLeft()。 注意:由于 这需要分析文本,因此速度可能比其他选项慢。 |
另请参阅 setTextDirection()、setTextAlign() 以及fillText()。
enum class QCanvasPainter::WrapMode
WrapMode 用于定义文本如何换行。
| 常量 | 值 | 描述 |
|---|---|---|
QCanvasPainter::WrapMode::NoWrap | 0 | (默认)不会进行换行。如果文本中换行符不足,则 contentWidth 将超过设定的宽度。 |
QCanvasPainter::WrapMode::Wrap | 1 | 如果可能,换行将在单词边界处进行;否则,将在行中的适当位置进行,即使是在单词中间。 |
QCanvasPainter::WrapMode::WordWrap | 2 | 仅在单词边界处进行换行。如果单词过长,内容宽度将超过设定的宽度。 |
QCanvasPainter::WrapMode::WrapAnywhere | 3 | 换行将在行中的任意位置进行,即使是在单词中间也不例外。 |
另请参阅 setTextWrapMode() 和fillText()。
成员函数文档
QCanvasPainter::QCanvasPainter()
创建一个绘图器。
[noexcept] QCanvasPainter::~QCanvasPainter()
摧毁了这位画家。
qsizetype QCanvasPainter::activeImageCount() const
返回已注册到此QCanvasPainter 上的活跃QCanvasImage 对象的数量。这还包括为gradients 内部生成的图像。
QCanvasImage 通过注册QCanvasOffscreenCanvas 实例或外部管理的纹理所创建的对象,本函数不予考虑。
另请参阅 activeImageMemoryUsage()、addImage( ) 以及removeImage( )。
qsizetype QCanvasPainter::activeImageMemoryUsage() const
返回该绘图器所有活动QCanvasImage 实例所占用的图像(像素)数据内存的近似值(单位为千字节),这些实例由接受QImage 参数的addImage()重载方法创建。该值还包括gradients 方法内部创建的图像数据。
QCanvasPainter 一旦addImage() 返回,该函数便不会保留 CPU 端QImage 数据的副本。因此,该函数的返回结果是对用于纹理的 GPU 内存大小的近似估计。
注意:该值 仅是基于图像格式和尺寸的估计值。Qt 无法获知纹理数据在 GPU 侧的存储方式及内存布局。
通过其他addImage() 重载函数注册的离屏画布和外部管理的纹理,本函数不会将其纳入计算范围。
对于每个有效的QCanvasImage ,均可通过调用sizeInBytes()查询其具体字节大小。即使QCanvasImage 是由QCanvasOffscreenCanvas 或QRhiTexture 创建的,该函数也能返回有效结果,但它不会考虑Mipmap或多采样数据。
另请参阅 activeImageCount()、addImage() 和removeImage()。
QCanvasImage QCanvasPainter::addImage(const QImage &image, QCanvasPainter::ImageFlags flags = {})
添加image ,其中flags 可供绘图器用作纹理。返回QCanvasImage ,其中包含纹理ID及有关该图像的其他信息。返回的QCanvasImage 随后可用于drawImage 和QCanvasImagePattern 。调用此方法后,无需将image QImage 保存在内存中。
使用相同的image 进行调用是一项开销很小的操作,因为预计会命中缓存。
在优化时需注意,仅调用一次 addImage() 可能并不总是足够,这取决于应用程序的设计。 例如,如果底层图形资源丢失(例如,由于将小部件移动到新的顶级,绘图器在后台与新的QRhi 相关联),则必须调用此函数,以便从image 重新创建本机图形纹理。
另请参阅 drawImage() 和removeImage()。
QCanvasImage QCanvasPainter::addImage(QRhiTexture *texture, QCanvasPainter::ImageFlags flags = {})
添加了texture ,其中flags 可供绘图器作为纹理使用。返回的QCanvasImage 可用于drawImage 和QCanvasImagePattern 。
注意: texture 的所有权不会被转移。
这是一个重载函数。
另请参阅 drawImage() 和removeImage()。
QCanvasImage QCanvasPainter::addImage(const QCanvasOffscreenCanvas &canvas, QCanvasPainter::ImageFlags flags = {})
将canvas 注册为flags ,并将其作为图像提供给绘图器。返回的QCanvasImage 可用于调用drawImage 和QCanvasImagePattern 。
注意: canvas 会继续管理底层原生图形资源,这意味着调用removeImage() 不会导致canvas 失效。
这是一个重载函数。
另请参阅 drawImage() 和removeImage()。
void QCanvasPainter::addPath(const QPainterPath &path)
将path 添加到当前路径中。
注意: QCanvasPainter 默认使用NonZero (Qt::WindingFill )填充规则,而QPainterPath 默认使用Qt::OddEvenFill 。因此,如有需要,请记得切换填充规则,例如使用setFillRule()。
注意:此 方法主要用于兼容QPainter 和QPainterPath 。与直接使用QCanvasPainter 方法绘制路径相比,它并不会提高性能。
void QCanvasPainter::addPath(const QCanvasPath &path, const QTransform &transform = QTransform())
将path 添加到当前路径中,可选地使用transform 来修改路径节点。当未提供transform (或其值为单位矩阵)时,由于该操作会复用路径数据,因此执行速度非常快。
![]() | |
void QCanvasPainter::addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())
将path 添加到当前路径中,从start 处的命令开始,并包含count 个命令。可选地使用transform 来修改路径指针。系统会检查start 和count 之间的范围,以确保不会访问超过QCanvasPath::commandsSize() 个命令。如果路径不应从当前路径位置继续,请先调用moveTo() 函数,例如使用path.positionAt(start - 1) 。
![]() | |
void QCanvasPainter::arc(qreal centerX, qreal centerY, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
创建一个新的圆形弧形子路径。该弧的圆心位于centerX ,圆周坐标为centerY ,半径为radius ;绘制角度范围为a0 至a1 ,并沿direction (ClockWise 或CounterClockWise )方向扫掠。当connection 为NotConnected 时,弧不会从前一个路径位置到弧的起始点添加一条连线。角度以弧度为单位指定。
![]() | |
注意:虽然 HTML canvas 2D 绘图环境使用 arc() 绘制圆形,但在QCanvasPainter 中,建议使用circle() 或ellipse() 来绘制圆形。
void QCanvasPainter::arc(QPointF centerPoint, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
创建一个新的圆形弧形子路径。弧的中心位于centerPoint ,半径为radius ;弧从角度a0 画至a1 ,并沿direction (ClockWise 或CounterClockWise )进行扫掠。当connection 为NotConnected 时,弧不会从前一个路径位置到弧的起始点添加一条连线。角度以弧度为单位。
注意:虽然 HTML canvas 2D 绘图上下文使用 arc() 绘制圆,但在QCanvasPainter 中,建议使用circle() 或ellipse() 来绘制圆。
这是一个重载函数。
void QCanvasPainter::arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius)
在由最后一个路径点以及两个指定点(x1 、y1 和x2 、y2 )确定的拐角处,添加一个弧段,其弧长为radius 。如有必要,该弧段会自动通过一条直线与路径的最新点连接。
![]() | |
void QCanvasPainter::arcTo(QPointF controlPoint1, QPointF controlPoint2, qreal radius)
在由最后一个路径点以及两个指定点(controlPoint1 和controlPoint2 )所定义的拐角处,添加一段弧,其弧长为radius 。如有必要,该弧会自动通过一条直线与路径的最新点相连。
这是一个重载函数。
void QCanvasPainter::beginHoleSubPath()
开始一个孔子路径。这相当于setPathWinding(QCanvasPainter::PathWinding::ClockWise))
![]() | |
另请参阅 beginSolidSubPath()。
void QCanvasPainter::beginPath()
在清除当前路径的同时,开始绘制新路径。
void QCanvasPainter::beginSolidSubPath()
开始一个完整的子路径。这等同于setPathWinding(QCanvasPainter::PathWinding::CounterClockWise))
另请参阅 beginHoleSubPath()。
void QCanvasPainter::bezierCurveTo(qreal cp1X, qreal cp1Y, qreal cp2X, qreal cp2Y, qreal x, qreal y)
从路径的最后一个点出发,通过两个控制点(cp1X 、cp1Y 和cp2X 、cp2Y ),到指定点(x 、y ),添加一个三次贝塞尔曲线段。
![]() | |
void QCanvasPainter::bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)
从路径的末端点出发,经过两个控制点(controlPoint1 和controlPoint2 ),连接至指定点endPoint ,绘制一段三次贝塞尔曲线。
这是一个重载函数。
void QCanvasPainter::circle(qreal centerX, qreal centerY, qreal radius)
创建一个新的圆形子路径,其中心位于 (centerX,centerY),半径为radius 。
![]() | |
void QCanvasPainter::circle(QPointF centerPoint, qreal radius)
创建一个以centerPoint 为圆心、半径为radius 的新圆形子路径。
这是一个重载函数。
void QCanvasPainter::cleanupResources()
该函数会从缓存中移除未使用的纹理。
此外,调用此函数时,其他缓存和资源池可能会被缩减,以尽量减少内存占用。这可能会导致后续的绘制调用开销增加。
void QCanvasPainter::clearRect(qreal x, qreal y, qreal width, qreal height)
通过将由x 、y 、width 、height 指定的矩形区域填充为透明黑色,来清除该区域内的像素。由于清除操作无需进行混合,因此其执行速度可能快于fillRect()。
![]() | |
void QCanvasPainter::clearRect(const QRectF &rect)
通过将rect 指定的矩形区域填充为透明黑色,来清除该矩形区域内的像素。这是一个重载方法,使用了QRectF 。
这是一个重载函数。
void QCanvasPainter::closePath()
用一条线段闭合当前子路径。这相当于将lineTo([起点])作为最后一个路径元素。
QCanvasOffscreenCanvas QCanvasPainter::createCanvas(QSize pixelSize, int sampleCount = 1, QCanvasOffscreenCanvas::Flags flags = {})
返回一个新的离屏画布,其pixelSize 、sampleCount 和flags 参数均按给定值设置。
画布的大小以像素为单位指定。此后,pixelSize 、sampleCount 和flags 属性均为不可变的。若要获取具有不同大小、采样数或标志的画布,请创建一个新的画布。
若要使用绘制命令针对离屏画布,在使用底层 API 时请调用相应的QCanvasRhiPaintDriver::beginPaint() 重载方法;若使用便捷控件或Qt Quick 项类,则请调用QCanvasPainterWidget::beginCanvasPainting() 或QCanvasPainterItemRenderer::beginCanvasPainting()。
通常在向画布绘制时,画布内容会被清空。若要禁用此行为,请在flags 中传入PreserveContents 。
若要请求对画布进行多采样渲染(多采样抗锯齿,MSAA),请将采样数设置为大于 1 的值,例如 4 或 8。但在启用多采样时,不支持在渲染过程之间保留画布内容,此时PreserveContents 标志将无法生效。
注意: 离屏画布由一个 独立于主渲染目标的纹理作为后端,且对其渲染时始终采用缩放因子(设备像素比)为1。例如,若要创建一个与QCanvasPainterWidget 的实际渲染尺寸相匹配的画布,请将size() * devicePixelRatio() 作为pixelSize 传递,因为控件的size() 仅表示不包含缩放因子的逻辑尺寸。
void QCanvasPainter::destroyCanvas(QCanvasOffscreenCanvas &canvas)
销毁支持 `canvas` 的资源。此时,`canvas ` 将变为 `null canvas `。
绘图器在被销毁时会自动执行此操作。因此,仅当需要立即释放相关资源时,才需要调用此函数。
void QCanvasPainter::drawBoxShadow(const QCanvasBoxShadow &shadow)
绘制一个shadow 的框。阴影将根据shadow 中定义的位置、大小、颜色、模糊等参数进行绘制。调用本方法之前无需先调用beginPath()。
注意:若要 直观地查看 drawBoxShadow() 覆盖的区域,请设置QCPAINTER_DEBUG_SHADOW_RECT 环境变量。
![]() | |
另请参阅 QCanvasBoxShadow 。
void QCanvasPainter::drawImage(const QCanvasImage &image, qreal x, qreal y)
将image 以默认大小绘制到x 中,y 。
![]() | |
另请参阅 addImage()。
void QCanvasPainter::drawImage(const QCanvasImage &image, const QRectF &destinationRect)
将image 绘制为destinationRect 的位置和大小。
这是一个重载函数。
另请参阅 addImage()。
void QCanvasPainter::drawImage(const QCanvasImage &image, const QRectF &sourceRect, const QRectF &destinationRect)
将image 绘制到destinationRect 的位置和大小,源区域为sourceRect 。
![]() | |
这是一个重载函数。
另请参阅 addImage()。
void QCanvasPainter::drawImage(const QCanvasImage &image, qreal x, qreal y, qreal width, qreal height)
将image 绘制到x ,坐标为y ,在给定的width 和height 处。
![]() | |
这是一个重载函数。
另请参阅 addImage()。
void QCanvasPainter::ellipse(qreal centerX, qreal centerY, qreal radiusX, qreal radiusY)
创建一个新的椭圆形子路径,其中心位于 (centerX,centerY),半径分别为radiusX 和radiusY 。
![]() | |
void QCanvasPainter::ellipse(const QRectF &rect)
在rect 中创建一个新的椭圆形子路径。该椭圆将覆盖rect 区域。
![]() | |
这是一个重载函数。
void QCanvasPainter::ellipse(QPointF centerPoint, qreal radiusX, qreal radiusY)
创建一个新的椭圆形子路径,其中心位于centerPoint ,半径为radiusX ,长度为radiusY 。
这是一个重载函数。
void QCanvasPainter::fill()
使用当前的填充样式和填充规则填充当前路径。
![]() | |
另请参阅 setFillStyle() 和setFillRule()。
[since 6.12] void QCanvasPainter::fill(QCanvasPainter::FillRule fillRule)
使用当前填充样式和填充规则fillRule 填充当前路径。
这是一个重载函数。
该函数在 Qt 6.12 中引入。
另请参阅 setFillStyle() 和setFillRule()。
void QCanvasPainter::fill(const QCanvasPath &path, int pathGroup = -1)
使用当前的填充样式和填充规则填充path ,并将其归入pathGroup 。当路径包含更多命令且大部分为静态时,通过QCanvasPath 进行绘制是最佳选择。
当pathGroup 的值为-1 时,路径不会在GPU端被缓存。这是默认行为。若要请求缓存路径数据,请传入一个不小于0 的值。有关路径缓存组的更多信息,请参阅QCanvasPath 文档。
无需在此方法之前调用beginPath()。
![]() | |
这是一个重载函数。
另请参阅 setFillStyle()、setFillRule() 以及removePathGroup()。
[since 6.12] void QCanvasPainter::fill(const QCanvasPath &path, QCanvasPainter::FillRule fillRule, int pathGroup = -1)
使用当前的填充样式和填充规则填充path fillRule
这是一个重载函数。
该函数在 Qt 6.12 中引入。
void QCanvasPainter::fillRect(qreal x, qreal y, qreal width, qreal height)
在指定位置(x 、y )绘制一个填充矩形,其大小为width 、height 。
注意:此方法 仅为方便起见。若需填充多个矩形,建议使用rect()。
![]() | |
void QCanvasPainter::fillRect(const QRectF &rect)
在rect 中绘制一个填充矩形。这是一个使用QRectF 的重载方法。
注意:此方法 仅为方便起见而提供。当需要填充多个矩形时,请优先使用rect()。
这是一个重载函数。
void QCanvasPainter::fillText(const QString &text, qreal x, qreal y, qreal maxWidth = 0)
在指定位置(x ,y )绘制字符串text ,并使用当前的textAlign和textBaseline。若要使文本换行成多行,请使用setTextWrapMode()将文本换行模式设置为默认值NoWrap 以外的其他选项。可选参数maxWidth 的默认值为0 。这意味着,例如当设置为WordWrap 时,文本将按单词进行换行。 将maxWidth 参数设置为所需的行宽(单位为像素)。
![]() | |
另请参阅 setTextAlign()、setTextBaseline()和setTextWrapMode()。
void QCanvasPainter::fillText(const QString &text, const QRectF &rect)
使用当前的 textAlign 和 textBaseline,在rect 内绘制text 字符串。rect 参数的宽度将作为 maxWidth 使用。
这是一个使用 `QRectF` 的重载方法。使用此方法绘制文本时,通常将文本基线设置为 `TextBaseline::Top ` 或 `TextBaseline::Middle ` 会非常有用。
![]() | |
这是一个重载函数。
另请参阅 setTextAlign()、setTextBaseline() 和setTextWrapMode()。
void QCanvasPainter::fillText(const QString &text, QPointF point, qreal maxWidth = 0)
在指定的point 处绘制text 字符串,并采用当前的textAlign和textBaseline设置。若要使文本折行显示,请使用setTextWrapMode()将文本换行模式设置为默认值NoWrap 以外的其他选项。可选参数maxWidth 的默认值为0 。这意味着,例如当设置为WordWrap 时,文本将按单词进行换行。 将maxWidth 参数设置为所需的行宽(单位为像素)。
这是一个使用QPointF 的重载方法。
这是一个重载函数。
另请参阅 setTextAlign()、setTextBaseline() 以及setTextWrapMode()。
QTransform QCanvasPainter::getTransform() const
返回当前的变换。
void QCanvasPainter::lineTo(qreal x, qreal y)
从路径的最后一点到点 (x,y) 添加一条线段。
![]() | |
void QCanvasPainter::lineTo(QPointF point)
从路径的末端点到point 添加一条线段。
这是一个重载函数。
void QCanvasPainter::moveTo(qreal x, qreal y)
以 (x,y) 作为起始点,开始一条新的子路径。
void QCanvasPainter::moveTo(QPointF point)
以point 为起始点,开始一个新的子路径。
这是一个重载函数。
void QCanvasPainter::quadraticCurveTo(qreal cpX, qreal cpY, qreal x, qreal y)
从路径的最后一个点出发,经由一个控制点(cpX ,cpY )到指定点(x ,y ),添加一段二次贝塞尔曲线。
![]() | |
void QCanvasPainter::quadraticCurveTo(QPointF controlPoint, QPointF endPoint)
从路径的最后一个点出发,通过controlPoint ,添加一条二次贝塞尔曲线段,连接至指定的endPoint 。
这是一个重载函数。
void QCanvasPainter::rect(qreal x, qreal y, qreal width, qreal height)
在坐标x 、y 处创建一个新的矩形子路径,其尺寸为width 、height 。
![]() | |
void QCanvasPainter::rect(const QRectF &rect)
在坐标rect 处创建一个新的矩形子路径。这是一个重载的方法,使用QRectF 实现。
这是一个重载函数。
void QCanvasPainter::removeImage(const QCanvasImage &image)
释放与image 关联的资源,并将图像从绘图器中移除。
注意: 通常无需调用此函数 ,因为纹理等资源会在画笔类的析构函数中自动释放。当因图像数量过多且其中部分已不再使用而需要减少内存占用时,此函数便十分有用。
注意:已移除的 图像将无法再用于绘制操作。
注意: 使用底层 3D API 创建的纹理等资源 可能不会立即被释放。此类操作可能会被推迟到后续帧中,通常是在当前 `QCanvasPainter ` 提交了当前活动的绘制调用集后重新开始绘制时。
另请参阅 addImage()。
void QCanvasPainter::removePathGroup(int pathGroup)
从绘图器缓存中移除pathGroup 。此后,若对pathGroup 调用fill()或stroke(),将重新生成路径并将其写入组缓存。
注意: 通常无需调用此方法 ,因为路径会在绘图器的析构函数中被移除。仅当不再需要pathGroup 时,或者例如路径中的命令数量远少于以往且需要缩小缓冲区大小时,才应使用此方法来减少内存占用。
void QCanvasPainter::reset()
将当前绘图器的状态重置为默认值。
这包括描边和填充样式及相关属性、变换矩阵、裁剪区域、文本相关设置、合成属性、绘制状态堆栈以及抗锯齿设置。
注意:此 方法与 HTML Canvas 2D 上下文的 reset() 方法不同,它不会在视觉上清除画布缓冲区。
注意: setWindingEnforce() 和setHighQualityStroking() 的值不会改变。
![]() | |
void QCanvasPainter::resetClipping()
重置并禁用剪裁功能。
另请参阅 setClipRect()。
void QCanvasPainter::resetTransform()
将当前变换重置为单位矩阵。
void QCanvasPainter::restore()
弹出并恢复当前的渲染状态。因此,之前保存的状态将被恢复。如果尚未调用save() 且状态栈为空,调用此方法将不执行任何操作。
另请参阅 save()。
void QCanvasPainter::rotate(qreal angle)
将当前坐标系顺时针旋转angle 。
角度以弧度为单位。请使用qDegreesToRadians()将度转换为弧度。
![]() | |
void QCanvasPainter::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radius)
在坐标x 、y 处创建一个新的圆角矩形子路径,其尺寸为width 、height 。圆角半径为radius 。
![]() | |
void QCanvasPainter::roundRect(const QRectF &rect, qreal radius)
在rect 处创建一个新的圆角矩形子路径,其顶点坐标为radius 。这是一个重载方法,使用QRectF 实现。
这是一个重载函数。
void QCanvasPainter::roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
在坐标rect 处创建一个新的圆角矩形子路径。每个角的圆角半径可以不同,可使用radiusTopLeft 、radiusTopRight 、radiusBottomRight 、radiusBottomLeft 。
这是一个重载函数。
void QCanvasPainter::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
在坐标x 、y 处创建一个新的圆角矩形子路径,其尺寸为width 、height 。各角的圆角程度可以各不相同,具体参数为radiusTopLeft 、radiusTopRight 、radiusBottomRight 、radiusBottomLeft 。
![]() | |
这是一个重载函数。
void QCanvasPainter::save()
将当前渲染状态压入并保存到状态栈中。必须使用对应的restore()方法来恢复该状态。
![]() | |
另请参阅 restore()。
void QCanvasPainter::scale(qreal scale)
将当前坐标系按scale 的比例进行缩放。x和y坐标均按相同比例进行缩放。
![]() | |
void QCanvasPainter::scale(qreal scaleX, qreal scaleY)
将当前坐标系按scaleX 和scaleY 进行缩放。
这是一个重载函数。
void QCanvasPainter::setAntialias(qreal antialias)
将当前的抗锯齿程度设置为antialias 像素。抗锯齿程度越高,绘制效果越平滑。此设置仅影响填充和描边绘制,不影响图像或文本。默认值为1.0 ,最大值为10.0 。
抗锯齿效果可针对每个路径单独调整,因此可以在每次描边/填充之前进行设置。若要禁用抗锯齿并降低渲染开销,请将抗锯齿值设为0 。
![]() | |
另请参阅 setTextAntialias()。
void QCanvasPainter::setClipRect(qreal x, qreal y, qreal width, qreal height)
将当前剪切矩形设置为 (x,y,width,height)。剪切矩形会根据当前变换进行变换。
注意:裁剪 会带来一定的性能开销,因此应仅在必要时使用。
![]() | |
另请参阅 resetClipping()。
void QCanvasPainter::setClipRect(const QRectF &rect)
将当前剪切矩形设置为rect 。剪切矩形将根据当前变换进行变换。
注意:裁剪 会带来一定的性能开销,仅应在必要时使用。
这是一个重载函数。
另请参阅 resetClipping()。
[since 6.12] void QCanvasPainter::setFillRule(QCanvasPainter::FillRule fillRule)
将路径填充规则设置为fillRule 。该值将应用于规则设置后所有对fill()的调用。默认填充规则为QCanvasPainter::FillRule::NonZero
![]() | |
该函数于 Qt 6.12 中引入。
void QCanvasPainter::setFillStyle(QColor color)
将填充样式设置为纯色color 。默认填充样式为纯黑色(0, 0, 0, 1)。
![]() | |
void QCanvasPainter::setFillStyle(const QCanvasBrush &brush)
将填充样式设置为brush 。默认填充样式为纯黑色(0, 0, 0, 1)。
![]() | |
这是一个重载函数。
void QCanvasPainter::setFont(const QFont &font)
将font 设置为当前活动字体。
void QCanvasPainter::setGlobalAlpha(qreal alpha)
将全局透明度(alpha)值设置为alpha 。该透明度值将应用于所有渲染的图形。原本已透明的路径也会按比例变得更加透明。透明度值应在0.0(完全透明)和1.0(完全不透明)之间。默认情况下,透明度值为1.0 。
![]() | |
void QCanvasPainter::setGlobalBrightness(qreal value)
将全局亮度设置为value 。该亮度将应用于所有渲染的图形。值为0时,绘制结果将为纯黑色。该值也可以大于1.0,以提高亮度。默认情况下,亮度为1.0 。
![]() | |
void QCanvasPainter::setGlobalCompositeOperation(QCanvasPainter::CompositeOperation operation)
将全局合成操作模式设置为operation 。此模式适用于所有绘制操作。默认模式为QCanvasPainter::CompositeOperation::SourceOver 。
注意:为了 正常工作,合成模式需要启用alphaBlending ,并且画布必须使用透明背景。
![]() | |
void QCanvasPainter::setGlobalContrast(qreal value)
将全局对比度设置为value 。此对比度将应用于所有渲染的图形。值为0时,渲染结果将完全呈灰色(0.5, 0.5, 0.5)。该值也可以大于1.0,以提高对比度。默认情况下,对比度为1.0 。
![]() | |
void QCanvasPainter::setGlobalSaturation(qreal value)
将全局饱和度设置为value 。此饱和度将应用于所有渲染的图形。值为0时将禁用饱和度,导致绘制效果完全为灰度。该值也可以大于1.0,以提高饱和度。默认情况下,饱和度为1.0 。
![]() | |
void QCanvasPainter::setHighQualityStroking(bool enabled)
将高质量描边设置为enabled 。在某些不常见的场景下(例如描边重叠且不具备完全不透明度时),将其设置为true 可获得更准确的渲染效果。启用此选项会增加渲染开销。默认值为false 。
![]() | |
void QCanvasPainter::setLineCap(QCanvasPainter::LineCap cap)
将笔画的线尾设置为cap 。默认的线端为QCanvasPainter::LineCap::Butt 。
![]() | |
void QCanvasPainter::setLineJoin(QCanvasPainter::LineJoin join)
将笔画的线段连接方式设置为join 。默认的线段连接方式为QCanvasPainter::LineJoin::Miter 。
![]() | |
另请参阅 setMiterLimit()。
void QCanvasPainter::setLineWidth(qreal width)
将笔画的线宽设置为width 像素。默认线宽为1.0 。当启用抗锯齿时,小于1像素的线宽会自动降低不透明度,从而生成平滑的输出效果。
![]() | |
另请参阅 stroke()。
void QCanvasPainter::setMiterLimit(qreal limit)
将斜切限制设置为limit 。斜切限制用于控制何时对锐角进行倒角。当角的长度超过此限制时,两条线之间将应用QCanvasPainter::LineJoin::Bevel 。此设置仅在采用QCanvasPainter::LineJoin::Miter 线段连接方式时生效。默认限制为10.0 。
![]() | |
另请参阅 setLineJoin()。
void QCanvasPainter::setPathWinding(QCanvasPainter::PathWinding winding)
将当前子路径winding 设置为CounterClockWise (默认)或ClockWise 。CounterClockWise 绘制实心子路径,而ClockWise 绘制孔洞。
![]() | |
另请参阅 beginHoleSubPath() 和beginSolidSubPath()。
void QCanvasPainter::setStrokeStyle(QColor color)
将描边样式设置为实线color 。默认描边样式为黑色实线(0, 0, 0, 1)。
![]() | |
void QCanvasPainter::setStrokeStyle(const QCanvasBrush &brush)
将描边样式设置为brush 。默认描边样式为实心黑色(0, 0, 0, 1)。
![]() | |
这是一个重载函数。
void QCanvasPainter::setTextAlign(QCanvasPainter::TextAlign align)
将文本的水平对齐方式设置为align 。默认对齐方式为QCanvasPainter::TextAlign::Start 。
![]() | |
另请参阅 setTextBaseline()。
void QCanvasPainter::setTextAntialias(qreal antialias)
设置当前文本的抗锯齿强度。数值antialias 是常规抗锯齿效果的倍数,这意味着0.0 将禁用抗锯齿,而2.0则将其效果加倍。默认值为1.0。
注意:由于 所采用的文本抗锯齿技术(SDF),最大抗锯齿程度相当有限,且在字体尺寸较小时,其影响较小。
![]() | |
void QCanvasPainter::setTextBaseline(QCanvasPainter::TextBaseline baseline)
将文本的垂直对齐方式(基线)设置为baseline 。默认对齐方式为QCanvasPainter::TextBaseline::Alphabetic 。
![]() | |
另请参阅 setTextAlign()。
void QCanvasPainter::setTextDirection(QCanvasPainter::TextDirection direction)
将文本方向设置为direction 。默认方向为QCanvasPainter::TextDirection::Inherit 。
![]() | |
void QCanvasPainter::setTextLineHeight(qreal height)
将换行文本的行高调整值(以像素为单位)设置为height 。默认行高为0 。
![]() | |
void QCanvasPainter::setTextWrapMode(QCanvasPainter::WrapMode wrapMode)
将文本换行模式设置为wrapMode 。默认换行模式为QCanvasPainter::WrapMode::NoWrap 。
![]() | |
void QCanvasPainter::setTransform(const QTransform &transform)
重置当前的变换,并改用transform 。
![]() | |
另请参阅 transform()。
void QCanvasPainter::setWindingEnforce(bool enabled)
将路径缠绕强制规则设置为enabled 。若将其设置为false ,则禁用路径缠绕强制规则,使其与setPathWinding()中设定的规则一致。禁用该功能可实现诸如通过按顺时针顺序添加点来在路径中创建孔洞等操作。禁用该功能还可提升性能。默认值为true 。
![]() | |
void QCanvasPainter::skew(qreal angleX, qreal angleY = 0.0)
将当前坐标系沿 X 轴以angleX 进行平移,沿 Y 轴以angleY 进行平移。角度以弧度为单位。
![]() | |
void QCanvasPainter::stroke()
使用当前的笔画样式绘制当前路径。
![]() | |
另请参阅 setStrokeStyle()。
void QCanvasPainter::stroke(const QCanvasPath &path, int pathGroup = -1)
使用当前的描边样式对path 进行描边,并将其归入pathGroup 。当路径包含较多命令且基本保持静态时,通过QCanvasPath 进行描边是最佳选择。
当 `pathGroup ` 为 `-1` 时,路径的渲染相关数据将不会被缓存。这是默认行为。若要请求缓存路径数据,请传入一个大于或等于 `0` 的值。有关使用路径缓存组的更多信息,请参阅QCanvasPath 文档。
无需在此方法之前调用beginPath()。
![]() | |
这是一个重载函数。
另请参阅 setStrokeStyle() 和removePathGroup()。
void QCanvasPainter::strokeRect(qreal x, qreal y, qreal width, qreal height)
在指定位置(x 、y )绘制一个带描边的矩形,其大小为width 、height 。
注意:此功能 仅为方便起见。当需要绘制多个矩形时,建议使用rect()。
![]() | |
void QCanvasPainter::strokeRect(const QRectF &rect)
在rect 中绘制一个带描边的矩形。这是一个使用QRectF 的重载方法。
注意:此方法 仅为方便起见而提供。当需要绘制多个矩形时,建议使用rect()。
这是一个重载函数。
QRectF QCanvasPainter::textBoundingBox(const QString &text, qreal x, qreal y, qreal maxWidth = 0) const
测量text 字符串在(x,y)处的边界框。
若要测量多行文本,请使用 `setTextWrapMode()` 将文本换行模式设置为默认值 `NoWrap` 以外的其他选项。同时,将可选参数 `maxWidth ` 设置为首选的行宽(单位为像素)。
返回QRectF ,其值为[xmin, ymin, width, height]。测量值以本地坐标系为基准返回。
![]() | |
QRectF QCanvasPainter::textBoundingBox(const QString &text, const QRectF &rect) const
测量位于rect 的text 字符串的边界框。返回QRectF ,其中包含 [xmin, ymin, width, height] 这四个值。测量值以本地坐标系为基准返回。
这是一个重载函数。
QRectF QCanvasPainter::textBoundingBox(const QString &text, QPointF point, qreal maxWidth = 0) const
测量位于point 处的text 字符串的边界框。
若要测量多行文本,请使用setTextWrapMode() 将文本换行模式设置为与默认值NoWrap 不同的选项。同时,将可选参数maxWidth 设置为首选的行宽(单位为像素)。
返回QRectF ,其值为 [xmin, ymin, width, height]。测量值以本地坐标系为基准返回。
这是一个重载函数。
void QCanvasPainter::transform(const QTransform &transform)
将当前坐标系乘以指定的transform 。
![]() | |
另请参阅 setTransform()。
void QCanvasPainter::translate(qreal x, qreal y)
将当前坐标系按x 和y 进行变换。
![]() | |
void QCanvasPainter::translate(QPointF point)
将当前坐标系沿point 方向平移。
这是一个重载函数。
© 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.































































