Animierter Kreis

Alles rund um die Programmierung mit Qt
Antworten
hubi1182
Beiträge: 3
Registriert: 2. Oktober 2017 14:40

Animierter Kreis

Beitrag von hubi1182 »

Hallo,

ich versuche mit QPainter einen "animierten Kreis" zu erstellen.
Der Kreis soll mit QPainter gezeichnet werden, dannach wieder gelöscht werden (Das löschen möchte ich durch einen QTimer steuern) und dannach soll ein neuer, größerer Kreis, gezeichnet werden.

Leider wird bei mir immer nur der erste Kreis gezeichnet und dannach passiert gar nichts mehr. :?
Währe super wenn mir da jemand weiter helfen könnte...

Mein Code zu dem ganzen sieht so aus:

Code: Alles auswählen

//Headerdatei**********************************************************************************************************************************
#ifndef KREISANIMIERT_H
#define KREISANIMIERT_H
#include <QWidget>

//für QPainter
#include <QtGui>
#include <QTimer>
#include <QPushButton>

class KreisAnimiert : public QWidget
{
Q_OBJECT

public:
QTimer *loeschenTimer;
QPushButton *beendenButton;
KreisAnimiert();
int x, y, breite, hoehe;


//die überschriebene Methode
protected:
    void paintEvent(QPaintEvent *);

private:
void kreisAnimiert();
void kreisLoeschen();

};
#endif // KREISANIMIERT_H

//cpp-datei****************************************************************************************************************************
#include "KreisAnimiert.h"
#include <thread>

KreisAnimiert::KreisAnimiert()
{
    resize(300, 360);
    setWindowTitle("Kreis animiert");

    beendenButton = new QPushButton(this);
    beendenButton->setGeometry(220, 320, 70, 20);
    beendenButton->setText("Beenden");

    QObject::connect(beendenButton, SIGNAL(clicked()), this, SLOT(close()));
}

void KreisAnimiert::paintEvent(QPaintEvent *)
{
    QPainter myPainter(this);

    //Die werte für den ersten Kreis
    x = 146;
    y = 146;
    breite = width()-294;
    hoehe = height()-354;

    myPainter.drawEllipse(x, y, breite, hoehe);

    loeschenTimer = new QTimer(this);
    loeschenTimer->start(100);
    QObject::connect(loeschenTimer, SIGNAL(timeout()), this, SLOT(kreisLoeschen()));
}

void KreisAnimiert::kreisAnimiert()
{
    //eine Instanz mit dem Gerät erzeugen
    QPainter myPainter(this);

    //Abbruchbedingung
    if(x <= 1)
    {
        close();
    }
    else
    {

    //Kreis zeichnen
    myPainter.drawEllipse(x, y, breite, hoehe);
    update();


//    myPainter.eraseRect(0, 0, width(), height());
//    update();

    //Werte für den Kreis ändern
    x = x - 5;
    y = y - 5;
    breite = breite + 10;
    hoehe = hoehe + 10;


    loeschenTimer->start(100);
    kreisLoeschen();
    }
}

void KreisAnimiert::kreisLoeschen()
{
    QPainter myPainter(this);

    myPainter.eraseRect(0, 0, width(), height());
    update();
    loeschenTimer->stop();
    kreisAnimiert();
}

//main-cpp*****************************************************************************************************************************************
#include "kreisanimiert.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    KreisAnimiert w;
    w.show();
    
    return a.exec();
}

Antworten