2016-03-26 13 views
0

Ich möchte Qt Widget mit QTimer (ohne Animationssystem) animieren und malen, also setze ich einen Timer und Startpunkt in enterEvent und im timercall slot mache ich die Grenze größer und so weiter ... aber es läuft einfach nicht und sagt Anwendung Ausfahrt mit dem Code 255:Problem mit dem Animieren von Qt Widget mit QTimer (Beenden mit Code 255)?

.h

#include <QtWidgets> 
class QWidget; 
class QPainter; 
class QTimer; 

class Sample : public QWidget 
{ 
    Q_OBJECT 
public: 
    Sample(QWidget *parent = 0); 
    ~Sample(); 
private: 
    QTimer *timer; 
    int weight=1, step=1; 
protected: 
    virtual void paintEvent(QPaintEvent *); 
    virtual void enterEvent(QEvent *); 
public slots: 
    void timercall(); 
}; 

CPP

Sample::Sample(QWidget *parent) 
    : QWidget(parent) 
{ 
    connect(timer,SIGNAL(timeout()),this,SLOT(timercall())); 
} 

Sample::~Sample() {} 

void Sample::paintEvent(QPaintEvent *) { 
    QPainter painter(this); 
    painter.setPen(QPen(Qt::black,weight)); 
    painter.setRenderHint(QPainter::Antialiasing); 
    QRect Rectangle=QRect (10,10,width()-20,height()-20); 
    painter.drawRect(Rectangle); 
} 

void Sample::enterEvent(QEvent *) { 
    timer->start(100); 
} 

void Sample::timercall() { 
    weight+=1; 
    if (step > 10) { 
     timer->stop(); 
    } 
    step++; 
    repaint(); 
} 

und dann, wenn ich diese Zeile aus meinem Code entfernen:

connect(timer,SIGNAL(timeout()),this,SLOT(timercall())); 

in enterEvent der Anwendungsabsturz passiert ist.

Antwort

2
private: 
    QTimer *timer; 

Sie nie von Ihrem timer Zeiger verweist das Objekt erstellen.

Erklären Sie stattdessen QTimer timer, da es sich um ein internes Objekt handelt, müssen Sie keinen Zeiger verwenden.