有问题用QTimer动画Qt Widget(退出代码255)?

时间:2016-03-26 16:05:50

标签: qt animation qtimer

我想用QTimer(没有动画系统)和绘画来动画Qt Widget,所以我在enterEvent和timercall插槽中放置一个计时器和起点我使边框更大等等...... 但它只是没有运行并说出代码为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();
}

然后当我从我的代码中删除这一行时:

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

在enterEvent中发生了应用程序崩溃。

1 个答案:

答案 0 :(得分:2)

private:
    QTimer *timer;

您永远不会创建timer指针引用的对象。

声明QTimer timer,因为它是一个内部对象,不需要使用指针。