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();
}