没有合适的资源?快使用搜索试试~ 我知道了~
Qt Quick之Canvas(画布),适合Qt初学者
需积分: 5 0 下载量 121 浏览量
2024-05-13
13:34:47
上传
评论
收藏 804KB PDF 举报
温馨提示
试读
41页
在Qt Quick中,Canvas是一个重要的元素,它提供了一个二维绘图API,允许开发人员在QML(Qt Modeling Language)中创建自定义的图形。QML-Canvas俗称画布,它用来定义一个绘图区域,可以使用ECMAScript代码来绘制直线、矩形、贝塞尔曲线、弧线、图片、文字等图元。同时,它还可以为这些图元应用填充颜色和边框颜色,甚至还可以进行低阶的像素级的操作。 QML-Canvas是Qt Quick中一个功能强大、灵活且易于使用的绘图工具,它可以帮助开发人员快速构建现代交互式应用程序中的自定义图形和动画效果。
资源推荐
资源详情
资源评论
Canvas(画布)
QML 中的 Canvas,俗称画布,它用来定义一个绘图区域,你可以使用 ECMAScript
代码来绘制直线、矩形、贝塞尔曲线、弧线、图片、文字等图元,还可以为这些
图元应用填充颜色和边框颜色,甚至还可以进行低阶的像素级的操作。
.1 开始之前
在正式开始介绍 Canvas 之前,先要说几个概念,我在《Qt on Android 核心编程》
一书中介绍 QPainter 绘图时其实已经提过,那就是绘图四大金刚:
● 画布
● 画师
● 画笔
● 画刷
本书独立成篇(如看过《Qt on Android 核心编程》更好),还要介绍 Canvas 的坐
标系统
以及图元这两个概念。不等了,开始吧。
1.1 画布
在 Qt Quick 里,Canvas 就是画布了。下面的代码就定义了一块画布:
Canvas {
width: 320;
height: 240;
}
1.2 画师
有了画布,谁来画呢?当然是画师了。那么谁是画师呢?Context2D 是也!QML
中的 Context2D 与 HTML 5 中的概念类似,你看着 HTML 5 的教程也可以把 Qt Quick
的 Canvas 和 Context2D 学会,不过 Qt 帮助中有详细的文档,还是使用索引模式
查找“Context2D”关键字来得快些。
代码如下:
Canvas {
onPaint: {
var ctx = getContext("2d");
}
}
在 Qt Quick 里,一块画布只有一个画师,唯一的一个,所以你想让它画什么,只
能排队等号,一个一个来,该换颜色时换颜色,该换字体就换字体,该……
1.3
画笔
Context2D 身上有百宝囊,什么都齐全,只是要作为程序员的我们告诉它我们的
意图。废话少说,笔有粗细,是为 lineWidth 属性也;笔有颜色,是为 strokeStyle
属性也。
所谓画笔,就是拿来描边儿的。
1.4 画刷
所谓画刷,就是用来填充画笔勾勒出的区域的。比如画笔勾了个菱形,边框是红
色的,里面是空白的,想让菱形内部变成绿色,那就得用画刷了。
在 Context2D 这里,fillStyle 属性就是描述画刷的。
1.5 坐标系
2D 世界,就是平面,在一个平面上确定一个点,需要两个值:x 坐标和 y 坐标。
这是一个很重要的基础概念。画布的原点在左上角(0,0)处,x 轴水平向右为
正,y 轴垂直向下为正。 这和我们初中数学课本里的笛卡尔坐标系略有不同。
Canvas 里的坐标原点是可以根据画师的需要变换的。
有规矩始有方圆,有坐标才能定点,画师才能知道把图元摆在哪里。
1.6 图元
图元,其实是“图形元素”一词的简称,指可以编辑的最小图形单位。
在使用 Canvas 和 Context2D 时,基本的图元有线、弧、矩形、曲线、文本、图片
等。
要知道怎样画直线,两点定一线……
要知道怎样画弧,弧从圆上来……
要知道贝塞尔曲线,方程式很复杂……
要知道图片的左上角和坐标原点是什么关系……图片看起来是矩形的,实际存储
是线性的,一堆字节很凌乱……
2
基本绘图模式
Canvas 是 Item 的派生类,通过设置 width 和 height 属性,就可以定一个绘图区
域,然后在 onPaint()信号处理器内使用 Context2D 对象来绘图。
下 面是一个简单的示例 , 使 用 Canvas 绘 制一个带红色 边 框 的 蓝 色 矩形。
draw_rect.qml:
import QtQuick 2.2
Canvas {
width: 400;
height: 240;
onPaint: {
var ctx = getContext("2d");
ctx.lineWidth = 2;
ctx.strokeStyle = "red";
ctx.fillStyle = "blue";
ctx.beginPath();
ctx.rect(100, 80, 120, 80);
ctx.fill();
ctx.stroke();
}
}
执行“qmlscene draw_rect.qml”命令,效果如图 1 所示。
图 1 绘制矩形
这个示例展示了使用 Canvas 和 Context2D 绘图的一般步骤:
① 定义一个 Canvas 对象,设置 width、height。
② 定义 onPaint 信号处理器。
③ 获取 Context2D 对象。
④ 实际的绘图操作。
定义 Canvas 对象,和我们非常熟悉的 Rectangle 没什么两样。
paint 是 Canvas 的信号,当需要绘图(更新)时会触发,开发者通过实现名为 onPaint
的信号处理器来响应 paint 信号,在信号处理器内进行绘图。
Context2D 是 QML 中负责 2D 绘图的对象,与 Canvas 结合使用。有两种使用
Context2D 对 象 的 方 式 , 上 面 的 示 例 中 在 onPaint 信 号 处 理 器 中 调 用
getContext("2d")获取 Context2D 对象,这是一种方式。还有一种方式,当我们设
置了 Canvas 对象的 contextType 属性(2D 绘图时取值为"2d")后,context 属性
就会保存一个可用的 Context2D 对象。所以,前面的示例也可以修改为:
import QtQuick 2.2
Canvas {
width: 400;
height: 240;
contextType: "2d";
onPaint: {
context.lineWidth = 2;
context.strokeStyle = "red";
context.fillStyle = "blue";
context.beginPath();
context.rect(100, 80, 120, 80);
context.fill();
context.stroke();
}
}
你可以再次执行 draw_rect.qml 查验效果。
Context2D 可以绘制路径、文本、填充矩形、图片等,我们一个个来说。
3 绘制路径
使用 Context2D 绘制路径的一般步骤:
① 调用 beginPath()。
② 调用 moveTo()、lineTo()、arcTo()、rect()、quadraticCurveTo()、arc()、bezierCurveTo()
等可以构造路径元素的方法。
③ 调用 fill()或 stroke()。
如你所见,我们的第一个使用 Canvas 的示例正是这么干的,它调用 rect()方法在
路径上添加了一个矩形,然后调用 fill()方法使用 fillStyle 保存的颜色来填充矩形,
调用 stroke()方法结束路径的绘制并使用 strokeStyle 保存的颜色描画路径的边线。
剩余40页未读,继续阅读
资源评论
icysmile131
- 粉丝: 2635
- 资源: 64
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功