Context2D QML Type
为 Canvas 项目上的形状提供 2D 上下文。更多
Import Statement: | import QtQuick |
属性
- canvas : QtQuick::Canvas
- fillRule : enumeration
- fillStyle : variant
- font : string
- globalAlpha : real
- globalCompositeOperation : string
- lineCap : string
- lineDashOffset : real
(since QtQuick 2.11)
- lineJoin : string
- lineWidth : real
- miterLimit : real
- shadowBlur : real
- shadowColor : string
- shadowOffsetX : real
- shadowOffsetY : real
- strokeStyle : variant
- textAlign : string
- textBaseline : string
方法
- object arc(real x, real y, real radius, real startAngle, real endAngle, bool anticlockwise)
- object arcTo(real x1, real y1, real x2, real y2, real radius)
- object beginPath()
- object bezierCurveTo(real cp1x, real cp1y, real cp2x, real cp2y, real x, real y)
- object clearRect(real x, real y, real w, real h)
- object clip()
- object closePath()
- object createConicalGradient(real x, real y, real angle)
- CanvasImageData createImageData(CanvasImageData imageData)
- CanvasImageData createImageData(Url imageUrl)
- CanvasImageData createImageData(real sw, real sh)
- object createLinearGradient(real x0, real y0, real x1, real y1)
- variant createPattern(Image image, string repetition)
- variant createPattern(color color, enumeration patternMode)
- object createRadialGradient(real x0, real y0, real r0, real x1, real y1, real r1)
- drawImage(variant image, real dx, real dy)
- drawImage(variant image, real dx, real dy, real dw, real dh)
- drawImage(variant image, real sx, real sy, real sw, real sh, real dx, real dy, real dw, real dh)
- object ellipse(real x, real y, real w, real h)
- object fill()
- object fillRect(real x, real y, real w, real h)
- object fillText(text, x, y)
- CanvasImageData getImageData(real x, real y, real w, real h)
- array getLineDash()
(since QtQuick 2.11)
- object isPointInPath(real x, real y)
- object lineTo(real x, real y)
- object measureText(text)
- object moveTo(real x, real y)
- object putImageData(CanvasImageData imageData, real dx, real dy, real dirtyX, real dirtyY, real dirtyWidth, real dirtyHeight)
- object quadraticCurveTo(real cpx, real cpy, real x, real y)
- object rect(real x, real y, real w, real h)
- object reset()
- object resetTransform()
- object restore()
- object rotate(real angle)
- object roundedRect(real x, real y, real w, real h, real xRadius, real yRadius)
- object save()
- object scale(real x, real y)
- setLineDash(array pattern)
(since QtQuick 2.11)
- object setTransform(real a, real b, real c, real d, real e, real f)
- object shear(real sh, real sv)
- object stroke()
- object strokeRect(real x, real y, real w, real h)
- object strokeText(text, x, y)
- object text(string text, real x, real y)
- object transform(real a, real b, real c, real d, real e, real f)
- object translate(real x, real y)
详细说明
Context2D 对象可通过Canvas
item 的getContext()
方法创建:
Canvas { id:canvas onPaint:{ var ctx = canvas.getContext('2d'); //... } }
Context2D API 实现了与W3C Canvas 2D Context API 标准相同的一些增强功能。
Context2D API 提供的呈现上下文定义了在Canvas
项目上绘图所需的方法和属性。以下内容将画布呈现上下文分配给context
变量:
var context = mycanvas.getContext("2d")
Context2D API 将画布渲染为一个坐标系,其原点 (0,0) 位于左上角,如下图所示。坐标沿x
轴从左到右递增,沿y
轴从上到下递增。
属性文档
canvas : QtQuick::Canvas |
保存上下文绘制的画布项目。
该属性只读。
fillRule : enumeration |
保存当前用于填充形状的填充规则。支持以下填充规则:
常量 | 描述 |
---|---|
Qt.OddEvenFill | Qt::OddEvenFill |
Qt.WindingFill | 默认Qt::WindingFill |
注: 与QPainterPath 不同,Canvas API 使用缠绕填充作为默认填充规则。fillRule 属性是上下文呈现状态的一部分。
另请参阅 fillStyle 。
fillStyle : variant |
保存当前用于填充形状的样式。样式可以是包含 CSS 颜色的字符串、CanvasGradient 或 CanvasPattern 对象。无效值将被忽略。该属性接受多种颜色语法:
- rgb(红、绿、蓝)"--例如:"rgb(255, 100, 55)"或 "rgb(100%, 70%, 30%)
- rgba(红、绿、蓝、alpha)' - 例如:'rgb(255, 100, 55, 1.0)'或'rgb(100%, 70%, 30%, 0.5)
- hsl(色相、饱和度、亮度)
- hsla(色相、饱和度、明度、alpha)
- '#RRGGBB'--例如:'#00FFCC
- Qt.rgba(red, green, blue, alpha) - 例如:'#00FFCC':Qt.rgba(0.3, 0.7, 1, 1.0) - 例如: Qt.rgba(0.3, 0.7, 1, 1.0)
如果在一个循环中多次分配fillStyle
或strokeStyle ,应选择最后的 Qt.rgba() 语法,因为它具有最佳性能,因为它已经是一个有效的QColor 值,不需要每次都进行解析。
默认值为 "#000000"。
另请参阅 createLinearGradient()、createRadialGradient()、createPattern() 和strokeStyle 。
font : string |
保存当前字体设置。
支持w3C 2d 上下文字体标准的子集:
- font-style(可选):正体 | 斜体 | 斜体
- font-variant(可选):正常字体 | 小大写字母
- font-weight (可选): 正常 | 粗体 | 1 ... 1000
- font-size:Npx | Npt(其中 N 为正数)
- font-family:请参见http://www.w3.org/TR/CSS2/fonts.html#propdef-font-family
注意: font-size 和 font-family 属性是必填项,必须按上述顺序排列。此外,名称中包含空格的字体族必须加引号。
默认字体值为 "10px sans-serif"。
globalAlpha : real |
保存当前应用于渲染操作的 alpha 值。该值的范围必须从0.0
(完全透明)到1.0
(完全不透明)。默认值为1.0
。
globalCompositeOperation : string |
保存当前的合成操作。允许的操作有
遵照 W3C 标准,所需模式之外的扩展组成模式以 "vendorName-operationName "语法提供,例如:QPainter::CompositionMode_Exclusion ,以 "qt-exclusion "提供。
lineCap : string |
保持当前行上限样式。可能的行上限样式有
常量 | 说明 |
---|---|
"butt" | (默认)Qt::FlatCap 每一行的末端都有一条垂直于行方向的平边。 |
"round" | Qt::RoundCap 在行尾添加直径等于行宽的半圆。 |
"square" | Qt::SquareCap 长方形,长为线宽,宽为线宽的一半,边缘垂直于线的方向。 |
其他值将被忽略。
lineDashOffset : real |
lineJoin : string |
当前行连接样式。连接存在于两个连续行共享的子路径中的任意一点。当子路径关闭时,在连接子路径中第一行和最后一行的第一点(相当于最后一点)也存在连接。
可能的连接线样式有
常量 | 描述 |
---|---|
"bevel" | Qt::BevelJoin 填充两条直线之间的三角形凹槽。 |
"round" | Qt::RoundJoin 填充两条直线之间的圆弧。 |
"miter" | (默认值)Qt::MiterJoin 两条直线的外缘延伸至一个角度相交,并填充该区域。 |
其他值将被忽略。
lineWidth : real |
保持当前线宽。大于 0 的非有限值将被忽略。
miterLimit : real |
保持当前的斜切限幅比。默认值为 10.0。
shadowBlur : real |
保持当前应用于阴影的模糊程度
shadowColor : string |
保留当前阴影颜色。
shadowOffsetX : real |
保持当前阴影的正水平偏移量。
另请参阅 shadowOffsetY 。
shadowOffsetY : real |
以垂直正距离保持当前阴影偏移。
另请参阅 shadowOffsetX 。
strokeStyle : variant |
样式可以是包含 CSS 颜色的字符串,也可以是CanvasGradient 或 CanvasPattern 对象。无效值将被忽略。
默认值为 "#000000"。
另请参阅 createLinearGradient()、createRadialGradient()、createPattern() 和fillStyle 。
textAlign : string |
保持当前文本对齐设置。可能的值有
常量 | 说明 |
---|---|
"start" | (默认)对齐到文本的起始边缘(从左到右文本对齐到左侧,从右到左文本对齐到右侧)。 |
"end" | 对齐到文本的末端边缘(在从左到右的文本中对齐到右边,在从右到左的文本中对齐到左边)。 |
"left" | Qt::AlignLeft |
"right" | Qt::AlignRight |
"center" | Qt::AlignHCenter |
其他值将被忽略。
textBaseline : string |
保持当前的基线对齐设置。可能的值有
常量 | 说明 |
---|---|
"top" | em 正方形的顶部 |
"hanging" | 悬挂基线 |
"middle" | 正方形的中间 |
"alphabetic" | (默认)字母基线 |
"ideographic" | 下表意基线 |
"bottom" | 正方形底部 |
其他值将被忽略。默认值为 "字母"。
方法文档
为当前子路径添加一条弧线,该弧线位于圆周上,圆心位于点 (x,y) ,半径为radius 。
startAngle 和endAngle 均以弧度为单位从 x 轴测量。
上图中每条弧的anticlockwise 参数都是false
,因为它们都是按顺时针方向绘制的。
以给定的控制点和半径在当前子路径上添加一条弧线,该弧线通过一条直线与前一点相连。绘制弧线的步骤与创建直线相同:
- 调用beginPath() 方法设置新路径。
- 调用moveTo(
x
,y
) 方法,将画布上的起始位置设置为 (x
,y
) 点。 - 要绘制弧或圆,请调用 arcTo(x1,y1,x2,y2,radius) 方法。这会在当前子路径上添加一条起点为 (x1,y1) 、终点为 (x2,y2) 和radius 的弧线,并用一条直线将其与前一个子路径连接起来。
另请参阅 arc 和W3C 的 2D 上下文标准中的 arcTo()。
object beginPath() |
将当前路径重置为新路径。
使用 (cp1x,cp1y) 和 (cp2x,cp2y) 指定的控制点,在当前位置和给定端点之间添加一条立方贝塞尔曲线。曲线添加完成后,当前位置将更新为曲线终点 (x,y) 处。下面的代码可以生成下图所示的路径:
ctx.strokeStyle = Qt.rgba(0, 0, 0, 1); ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(20, 0);//start point ctx.bezierCurveTo(-10, 90, 210, 90, 180, 0); ctx.stroke();
object clip() |
从当前路径创建剪切区域。不显示剪切路径以外的任何形状部分。使用clip()
方法创建复杂形状:
- 调用
context.beginPath()
方法设置剪切路径。 - 通过调用
lineTo
,arcTo
,arc
,moveTo
等方法和closePath
方法的任意组合来定义剪切路径。 - 调用
context.clip()
方法。
新形状就会显示出来。下面展示了剪切路径如何修改图像的显示方式:
另请参阅 beginPath(),closePath(),stroke(),fill() 和W3C 2d 上下文剪辑标准。
object closePath() |
通过在子路径的起点画一条线来关闭当前子路径,自动开始一条新路径。新路径的当前点是前一个子路径的第一个点。
另请参阅 W3C 2d 上下文标准中的 closePath。
返回CanvasGradient 对象,该对象表示围绕中心点(x,y )逆时针插值的锥形渐变色,起始角度angle ,单位为弧度。
另请参阅 CanvasGradient::addColorStop(),createLinearGradient(),createRadialGradient(),createPattern(),fillStyle, 和strokeStyle 。
CanvasImageData createImageData(CanvasImageData imageData) |
创建与imageData 参数尺寸相同的CanvasImageData 对象。
CanvasImageData createImageData(Url imageUrl) |
使用从imageUrl 加载的给定图像创建CanvasImageData 对象。
注意: 在调用此函数之前,必须已加载imageUrl ,否则将返回一个空的CanvasImageData 对象。
另请参阅 Canvas::loadImage()、QtQuick::Canvas::unloadImage() 和QtQuick::Canvas::isImageLoaded 。
CanvasImageData createImageData(real sw, real sh) |
以给定的尺寸 (sw,sh) 创建CanvasImageData 对象。
返回一个CanvasGradient 对象,该对象表示线性渐变,在起点 (x0,y0) 和终点 (x1,y1) 之间沿线过渡颜色。
梯度是颜色之间的平滑过渡。渐变有两种类型:线性渐变和径向渐变。渐变必须有两个或两个以上的色站,代表在渐变的起点和终点或圆圈之间从 0 到 1 的颜色移动。
另请参阅 CanvasGradient::addColorStop()、createRadialGradient()、createConicalGradient()、createPattern()、fillStyle 和strokeStyle 。
返回一个 CanvasPattern 对象,该对象使用给定的图像并按重复参数指定的方向重复。
image 参数必须是有效的图像项、有效的CanvasImageData 对象或加载的图像 url。如果没有图像数据,函数将产生 INVALID_STATE_ERR 异常。
repetition 的允许值为
常量 | 说明 |
---|---|
"repeat" | 双向 |
"repeat-x | 仅水平方向 |
"repeat-y" | 仅垂直 |
"no-repeat" | 既非 |
如果重复参数为空或 null,则使用值 "repeat"。
另请参阅 strokeStyle 和fillStyle 。
这是一个重载函数。返回一个使用给定color 和patternMode 的 CanvasPattern 对象。有效的图案模式有
常量 | 说明 |
---|---|
Qt.SolidPattern | Qt::SolidPattern |
Qt.Dense1Pattern | Qt::Dense1Pattern |
Qt.Dense2Pattern | Qt::Dense2Pattern |
Qt.Dense3Pattern | Qt::Dense3Pattern |
Qt.Dense4Pattern | Qt::Dense4Pattern |
Qt.Dense5Pattern | Qt::Dense5Pattern |
Qt.Dense6Pattern | Qt::Dense6Pattern |
Qt.Dense7Pattern | Qt::Dense7Pattern |
Qt.HorPattern | Qt::HorPattern |
Qt.VerPattern | Qt::VerPattern |
Qt.CrossPattern | Qt::CrossPattern |
Qt.BDiagPattern | Qt::BDiagPattern |
Qt.FDiagPattern | Qt::FDiagPattern |
Qt.DiagCrossPattern | Qt::DiagCrossPattern |
另请参阅 Qt::BrushStyle 。
返回一个CanvasGradient 对象,该对象表示一个径向渐变效果,该效果沿圆锥形绘制,圆锥形的起点为原点 (x0,y0) ,半径为r0 ,终点为原点 (x1,y1) ,半径为r1 。
另请参见 CanvasGradient::addColorStop(),createLinearGradient(),createConicalGradient(),createPattern(),fillStyle, 和strokeStyle 。
在画布上的位置 (dx,dy) 绘制给定的image 。注:image 类型可以是图像项、图像 url 或CanvasImageData 对象。如果给出的是图像项,如果图像未完全加载,本方法不会绘制任何内容。如果提供的是 url 字符串,则应首先调用 Canvas 项的Canvas::loadImage() 方法加载图像。即使给定的image
是CanvasImageData 对象,该图像的绘制也受当前上下文剪辑路径的限制。
另请参阅 CanvasImageData,Image,Canvas::loadImage,Canvas::isImageLoaded,Canvas::imageLoaded 以及W3C 2d 上下文标准中的 drawImage。
这是一个重载函数。在画布上的点 (dx,dy) 以image 的形式绘制给定项目,宽度为dw ,高度为dh 。
注:image 类型可以是图像项、图像 url 或CanvasImageData 对象。如果以图像项的形式给出,如果图像没有完全加载,此方法不会绘制任何图像。如果提供的是 url 字符串,则应首先调用 Canvas item 的Canvas::loadImage() 方法加载图像。即使给定的image
是CanvasImageData 对象,该图像的绘制也受当前上下文剪辑路径的限制。
另请参阅 CanvasImageData,Image,Canvas::loadImage(),Canvas::isImageLoaded,Canvas::imageLoaded 以及W3C 2d 上下文标准中的 drawImage。
这是一个重载函数。从源点 (sx,sy) 和源宽度sw, 源高度sh 将给定项目以image 的形式绘制到画布上的点 (dx,dy) 和宽度dw, 高度dh 上。
注:image 类型可以是图像或画布项、图像 url 或CanvasImageData 对象。如果给出的是图像项,如果图像未完全加载,本方法不会绘制任何图像。如果提供的是 url 字符串,则应首先调用 Canvas 项的Canvas::loadImage() 方法加载图像。即使给定的image
是CanvasImageData 对象,该图像的绘制也受当前上下文剪辑路径的限制。
另请参阅 CanvasImageData,Image,Canvas::loadImage(),Canvas::isImageLoaded,Canvas::imageLoaded, 以及W3C 2d 上下文标准中的 drawImage。
在左上角 (x,y)、宽度w 和高度h 所定义的边界矩形内创建一个椭圆,并将其作为封闭子路径添加到路径中。
椭圆由一条顺时针方向的曲线组成,起点和终点均为零度(3 点钟位置)。
object fill() |
使用当前填充样式填充子路径。
另请参阅 W3C 2d 上下文标准中的填充和fillStyle 。
object fillText(text, x, y) |
在给定位置 (x,y) 填充指定的text 。
另请参阅 font,textAlign,textBaseline 和strokeText 。
CanvasImageData getImageData(real x, real y, real w, real h) |
返回CanvasImageData 对象,其中包含由 (x,y,w,h) 指定的画布矩形的图像数据。
|
如果点 (x,y) 位于当前路径中,则返回true
。
object measureText(text) |
返回一个具有width
属性的对象,其值等同于在当前字体中使用给定的text 调用QFontMetrics::horizontalAdvance() 。
将给定的imageData 对象中的数据绘制到画布上 (dx,dy) 。
如果提供了一个脏矩形 (dirtyX,dirtyY,dirtyWidth,dirtyHeight) ,则只绘制该矩形中的像素。
在当前点和端点 (x,y) 之间添加一条二次贝塞尔曲线,控制点由 (cpx,cpy) 指定。
object reset() |
将上下文状态和属性重置为默认值。
object resetTransform() |
将变换矩阵重置为默认值(相当于调用setTransform(1
,0
,0
,1
,0
,0
) )。
另请参阅 transform() 、setTransform() 和reset() 。
object restore() |
弹出栈顶状态,将上下文恢复到该状态。
另请参阅 save() 。
object rotate(real angle) |
将画布绕当前原点旋转angle ,以弧度和顺时针方向为单位。
ctx.rotate(Math.PI/2);
旋转变换矩阵如下
其中angle 的旋转单位为弧度。
在路径上添加一个圆角矩形,由 (x,y,w,h) 指定。xRadius 和yRadius 参数指定了定义圆角矩形四角的椭圆半径。
object save() |
将当前状态推入状态栈。
在更改任何状态属性之前,应保存当前状态以备将来参考。上下文会维护一个绘图状态堆栈。每个状态由当前变换矩阵、剪切区域和以下属性值组成:
- strokeStyle
- fillStyle
- fillRule
- globalAlpha
- lineWidth
- lineCap
- lineJoin
- miterLimit
- shadowOffsetX
- shadowOffsetY
- shadowBlur
- shadowColor
- globalCompositeOperation
- font
- textAlign
- textBaseline
当前路径不是绘图状态的一部分。可以通过调用beginPath() 方法重置路径。
x 是水平方向的比例因子,y 是垂直方向的比例因子。
以下代码会将画布上绘制的对象的水平尺寸增加一倍,垂直尺寸减半:
ctx.scale(2.0, 0.5);
|
将破折号图案设置为给定的图案。
pattern 一个数字列表,用于指定交替绘制直线和空格的距离。
如果数组中元素的个数是奇数,数组中的元素会被复制并连接起来。例如,[5, 15, 25] 将变为 [5, 15, 25, 5, 15, 25]。
![]() | var space = 4 ctx.setLineDash([1, space, 3, space, 9, space, 27, space, 9, space]) ... ctx.stroke(); |
此方法在 QtQuick 2.11 中引入。
另请参阅 getLineDash() 和lineDashOffset 。
如下所述,将变换矩阵更改为参数给定的矩阵。
直接修改变换矩阵可让您一步完成缩放、旋转和平移变换。
画布上的每个点在绘制之前都要乘以矩阵。HTML 画布 2D 上下文规范将变换矩阵定义为
其中
- a 是水平 (x) 方向的缩放因子
- c 是 x 方向上的倾斜系数
- e 是 x 方向上的平移系数
- b 是在(垂直)Y 方向上的倾斜因子
- d 是 Y 方向上的比例因子
- f 是沿 y 轴方向的平移量
- 最后一行保持不变
比例因子和倾斜因子是倍数;e 和f 是坐标空间单位,就像 translate(x,y) 方法中的单位一样。
另请参见 transform().
object stroke() |
使用当前的笔画样式描绘子路径。
另请参阅 strokeStyle 和W3C 2d 上下文描边标准。
使用strokeStyle,lineWidth,lineJoin 和(如适用)miterLimit 属性绘制 (x,y,w,h) 所指定矩形的路径。
另请参阅 strokeStyle,lineWidth,lineJoin 和miterLimit 。
object strokeText(text, x, y) |
在 (x,y) 指定的位置删除给定的text 。
另请参阅 font,textAlign,textBaseline, 和fillText 。
将给定的text 添加到路径中,作为从提供的当前上下文字体创建的一组封闭子路径。
子路径的定位是使文本基线的左端位于 (x,y) 指定的点上。
该方法与setTransform() 非常相似,但不是替换旧的变换矩阵,而是将给定的变换矩阵乘以当前矩阵。
setTransform(a,b,c,d,e,f) 方法实际上是将当前变换重置为标识矩阵,然后以相同的参数调用 transform(a,b,c,d,e,f) 方法。
另请参见 setTransform().
以坐标空间为单位,将画布的原点水平移动x ,垂直移动y 。
通过平移原点,您可以在画布上绘制不同对象的图案,而无需手动测量每个形状的坐标。
© 2025 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.