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的绘图知识后,我根据它的一些功能制作了一个小项目:涂鸦画板. 功能:绘制各种图形,还可以选取相册上的照片做涂鸦,然后保存到相册中.其中,还包括功能有:颜色的选取.线宽的选取. ...
随机推荐
- jfinal上传下载
1. 上传 <form id="form1" method="post" enctype="multipart/form-data" ...
- Android框架浅析之锁屏(Keyguard)机制原理
最近终于成功的摆脱了FM收音机,迈向了新的模块:锁屏.状态栏.Launcher---姑且称之为“IDLE”小组,或许叫手机 美容小组,要是能施展下周星星同学的还我漂漂拳,岂不快哉. OK,闲话打住,咱 ...
- TIMESTAMP 与 explicit_defaults_for_timestamp
在MySQL 5.6.6之前,TIMESTAMP的默认行为: TIMESTAMP列如果没有明确声明NULL属性,默认为NOT NULL.(而其他数据类型,如果没有显示声明为NOT NULL,则允许NU ...
- 玩转Android之加速度传感器的使用,模仿微信摇一摇
Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...
- iOS之XIB拖拽scrollView
在使用storyboard和xib时,我们经常要用到ScrollView,还有自动布局AutoLayout,但是ScrollView和AutoLayout 结合使用,相对来说有点复杂.根据实践,我说一 ...
- Demo1_iOS9网络适配_改用更安全的HTTPS
iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一 使用TLS 1.2 SSL.采用TLS 1.2 协议,目的是 强制增强数据访问安全,而且 系统 Foundation ...
- 删除主目录下的.ssh目录下文件对boot2docker启动影响
现象: 1) boot2docker ssh需要输入密码 2) boot2docker start 或 up 需要输入密码 解决方法: 1)删除 /Users/sunzhaoyu/.boot2dock ...
- mvc给html扩展方法:
mvc给html扩展方法: 注意:扩展方法和所在的类都必须是 public static如果在页面直接使用新扩展的方法,需要web.config里把Web.Helper名称命名空间加上,页面才能访问到 ...
- 【转】【SQLServer】SQL事务用法begin tran,commit tran和rollback tran的用法
Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务.begin tran表示开始事务, commit tran表示提交事 ...
- ACM/ICPC ZOJ1009-Enigma 解题代码
#include <iostream> #include <string> using namespace std; int main() { int strwide; cin ...