码迷,mamicode.com
首页 > 其他好文 > 详细

qt 5 小练习 简易画板

时间:2015-10-10 23:09:21      阅读:457      评论:0      收藏:0      [点我收藏+]

标签:

如何在窗口上画线?用一根根线来拼凑图案呢?

 

想必大家都知道点的集合是线,而线的集合就是很多线啦,用线的集合我们能拼凑出许许多多的图案。于是我就要记录自己跟着老师的学习之路啦;

 

既然有集合的话,势必要用到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 小练习 简易画板

标签:

原文地址:http://www.cnblogs.com/Ten10/p/Ten14.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!