[SOLVED] Removing paint event and Repaint!



  • Hi, guys, it's me again,
    first of all I really wanna thank you all for helping me, I appreciate it.

    here comes my next problem.
    I fnally succeeded drawing a perfect sinus with dots.
    i gave my sinus even a little random look using rand();

    http://s1.directupload.net/images/121206/iiug9xcy.jpg
    or
    http://img713.imageshack.us/img713/3548/drawpots.jpg

    so I what I need is, after reaching the horizontal dot a certain value,
    I want to delete the painted line/curve/dots and painting again.

    here is how it looks so far.

    It would also work, just take the drawn dots and change their x and y values,
    but I dont know how to do this.

    HEADER

    @#include <qwidget>
    #include <math.h>

    class Lines : public QWidget
    {
    Q_OBJECT
    QTimer *timer1;
    QVector<QPoint> m_points;
    QVector<QPoint> m_2points;
    double vertical;
    double vertical2;
    double horizontal;
    double counter;
    double counter2;
    double random_a;
    double random_b;

    public:
    Lines(QWidget *parent = 0);

    protected:
    void paintEvent(QPaintEvent *event);
    void drawLines(QPainter *qp);

    public slots:
    void call_repaint();

    };
    @

    MAIN
    @#include <qpainter>
    #include "prototype.h"
    #include <qpainter.h>
    #include <qtimer.h>
    #include <Windows.h>
    #include <math.h>
    #include <iostream>
    #include <iomanip>
    using namespace std;

    Lines::Lines(QWidget *parent) : QWidget(parent)
    {
    counter = 0;
    counter2 = 1;
    vertical=0;
    vertical2=0;
    horizontal=0;
    random_a=0.05;

      timer1=new QTimer(this);
    timer1->setInterval(10);
    timer1->start();
    

    connect(timer1, SIGNAL(timeout()), this, SLOT(call_repaint()));

    }

    void Lines::paintEvent(QPaintEvent *e)
    {
    Q_UNUSED(e);
    QPainter ppp(this);
    drawLines(&ppp);
    }

    void Lines::call_repaint(){
    srand(time(NULL));
    horizontal++;
    double xxx;
    double yyy;

    xxx=sin(counter);
    yyy=sin(counter2);

    counter=counter+0.05;
    counter2=counter2+random_a;

    vertical = vertical + (xxx2);
    vertical2 = vertical2 + (yyy
    1);

    // !!!! Drawing
    m_points.append(QPoint(2+horizontal,50+vertical));
    m_2points.append(QPoint(2+horizontal,195+vertical2));
    repaint();}

    // !!!!! Changing Sinus
    if ( horizontal == 150 )
    {random_a = rand ()10 +1;random_a = random_a / 80; }

    // !!!!! Changing Sinus
    if ( horizontal == 400 )
    {srand(time(NULL)); random_a = rand () +1; random_a = random_a / 80; }
    // !!!!! After Reaching a certain value I want to draw again from the beginning
    if ( horizontal == 800){horizontal = 0;}

    void Lines::drawLines(QPainter *qp)
    {

    QPen pen(Qt::black, 2, Qt::SolidLine);
    qp->setPen(pen);

    QPoint pt;
    foreach(pt, m_points)
    {
        qp->drawPoint(pt);
    }
    

    foreach(pt, m_2points)
    {
    qp->drawPoint(pt);
    }}@

    I posted the whole code, so maybe someone can learn from it.
    Some parts were little tricky with the sinus.



  • wow, I am pretty sure, this is the wrong way to code this

    but you can simply create a new

    @QVector<QPoint> m_3points;@

    and then
    @
    if ( horizontal == 800){
    m_2points = m_3points;
    }@

    then it just disappears, cool


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.