使用 QTimer 为 Qt Widget 设置动画时遇到问题(退出代码为 255)?
Having issue with animating Qt Widget with QTimer(exit with code 255)?
我想用 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 中发生了应用程序崩溃。
private:
QTimer *timer;
您永远不会创建您的 timer
指针引用的对象。
改为声明 QTimer timer
,因为它是一个内部对象,所以不需要使用指针。
我想用 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 中发生了应用程序崩溃。
private:
QTimer *timer;
您永远不会创建您的 timer
指针引用的对象。
改为声明 QTimer timer
,因为它是一个内部对象,所以不需要使用指针。