qt 5 小练习 简易画板
如何在窗口上画线?用一根根线来拼凑图案呢?
想必大家都知道点的集合是线,而线的集合就是很多线啦,用线的集合我们能拼凑出许许多多的图案。于是我就要记录自己跟着老师的学习之路啦;
既然有集合的话,势必要用到QVector,这是一个QT提供给我们的容器,而QVector<QPoint> line; 则表示的就是一条线,那我们怎么表示线的集合呢? QVector< QVector<QPoint> > lines;
首先,我们从简单做起,在画板上画一条线,我们都知道画线的话,有起点,终点,也有路径,起点是鼠标压下去的时候,所以我们用到的是void mousePressEvent(QMouseEvent *e); 当然用之前肯定要加上头文件QMouseEvent,同理,路径是鼠标移动产生的,所以我们用到void mouseMoveEvent(QMouseEvent *e); 而终点则是我们鼠标松开时产生的,
void mouseReleaseEvent(QMouseEvent *e);
那么我们如何来获取点的坐标呢? line.appand(e->pos()); 而我们要注意的是,移动产生的每个点都要记录,所以要实时更新存到容器中,用update();函数,然后用void painEvent(QPainEvent *)来打印出来 QPainter p(this); for(int i=0;i< line.size()-1 ;i++) p.drawLine(line.at(i),line.at(i+1)); 把线上的每一个点连接起来
当我们画很多线条时,我们必须把每一根线都当做最后一根线,因为你随时可能结束,只要记录最后一根线的坐标即可,当我们按下左键的时候,我们就必须开始划线,于是我们用到 lines.append(line); 先把线存在线的数组里 ,然后引用线当做最后一根线,QVector<QPoint> &lastline = lines.last(); 记录他的坐标 lastline.append(e->pos()); 把后两句代码复制到其余两个函数中。关于显示,则用两个for循环,第一个控制输出多少条线,第二个控制这条线上的点。
for(int i=0;i< lines.size() ;i++)
{
const QVector<QPoint> & line = lines.at(i);
for(int j=0;j<line.size()-1;j++)
{
p.drawLine(line.at(j),line.at(j+1));
}
}
此文章属于博主原创,如需转载,请注明出处
作者 : Ten10
qt 5 小练习 简易画板的更多相关文章
- HTML5 Canvas 小例子 简易画板
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):0. 项目简介 & 成果展示
本教程咪博士将带领大家学习创建自己的窗口部件 (widget).最终,我们完成的作品是一个简易的画板程序. 当用 kivy 创建应用时,我们需要仔细思考以下 3 个问题: 我们创建的应用需要处理什么数 ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
1. 框架代码 用 PyCharm 新建一个名为 SimplePaintApp 的项目,然后新建一个名为 simple_paint_app.py 的 Python 源文件, 在代码编辑器中,输入以下框 ...
- canvas简易画板。
在学canvas的时候,想到可以做一个自己用来画画的简易画板,加上canvas的基础都已经学完,便尝试做了一个画板.如图 1.获取标签. var c=document.getElementById(' ...
- canvas简易画板
代码展示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):3. 随机颜色及清除按钮
1. 随机颜色 通过前面的教程,咪博士已经带大家实现了画板的绘图功能.但是,现在画板只能画出黄色的图案,还十分单调,接下来咪博士就教大家,如何使用随机颜色,让画板变得五彩斑斓. 改进后的代码如下: f ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
1. 理解 kivy 坐标系统 上一节中,咪博士带大家实现了画板程序的基础框架,以及一个基本的自定义窗口部件(widget).在上一节的末尾,咪博士留了一道关于 kivy 坐标系统的思考题给大家.通过 ...
- 微信小程序-简易计算器
代码地址如下:http://www.demodashi.com/demo/14210.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- iOS:quartz2D绘图小项目(涂鸦画板)
介绍:学了quartz2D的绘图知识后,我根据它的一些功能制作了一个小项目:涂鸦画板. 功能:绘制各种图形,还可以选取相册上的照片做涂鸦,然后保存到相册中.其中,还包括功能有:颜色的选取.线宽的选取. ...
随机推荐
- C#隐式类型
隐式类型 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...
- iOS VoiceOver Programming Guide
VoiceOver是苹果“读屏”技术的名称,属于辅助功能的一部分.VoiceOver可以读出屏幕上的信息,以帮助盲人进行人机交互. 这项技术在苹果的各个系统中都可以看到,OS X,iOS,watchO ...
- fedora 23 安装genymotion解决方案
由于学习android开发,都说genymotion模拟器给力,我就尝试了下,安装过程参考 :但出现这种错误:缺少库 libjpeg.so.8 ,我就各种goole和百度找到库(链接地址),解压之后放 ...
- ModelAndView使用方法
配置支持ModelAndView 在application.xml中配置支持ModelAndView,配置方式有两种. 配置一 <bean id="ViewResolver" ...
- 自己动手用Javascript写一个无刷新分页控件
.NET技术交流群:337901356 ,欢迎您的加入! 对 于一个用户体验好的网站来说,无刷新技术是很重要的,无刷新,顾名思义,就是局部刷新数据,有用过Asp.net Web Form技术开发网页的 ...
- 动态添加组件(XML)
1.利用LayoutInflater的inflate动态加载XMLmLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout_ID);La ...
- 技术QQ群
欢迎加入moss技术交流群. 欢迎加入微信技术交流群.
- 20151209jquery学习笔记Ajax 代码备份
/*$(function () { $("input").click(function() { $.ajax({ type:'POST', url:'test.php', data ...
- c语言学习之基础知识点介绍(十三):枚举的介绍和使用
一.枚举的介绍 /* 枚举:限制的待选项. 语法: enum 枚举名{ 选项1, 选项2, 选项3, ........ 选项n }; 注意:枚举中,选项之间用 , 隔开,最后一个不用加 , :并且枚举 ...
- oracle从各个表取得数据保存到另一个表
从各个表中取得数据保存另一个表中: CREATE VIEW PARAMETER_view ASWITH tall AS ( SELECT p.PI_NO,--产品序列号 p.SERIALNO,--产品 ...