• 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

  • 相关阅读:
    使用C++11实现线程池的两种方法
    二分查找算法的几种实现
    UNP多线程编程技巧简单总结
    使用带外数据设置 C/S 心跳机制
    无法修正错误,因为您要求某些软件包保持现状
    2012.12-操作系统-吕晓鑫-计算机操作系统综述
    2013.03-多核操作系统-梁荣晓-多核操作系统发展综述
    2011.09-多核操作系统-李彦冬-多核操作系统发展综述
    Simultaneous Multithreading: Maximizing On-Chip Parallelism(精读)
    Simultaneous Multithreading: Maximizing On-Chip Parallelism(泛读)
  • 原文地址:https://www.cnblogs.com/Ten10/p/Ten14.html
Copyright © 2020-2023  润新知