新建Qt Widgets Application,项目名为"Butterfly",基类选择"QMainWindow"。
Butterfly.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_Butterfly.h"
#include<QObject>
#include<QtWidgets/QGraphicsItem>
#include<QPainter>
#include<QtWidgets/QGraphicsScene>
#include<QtWidgets/QGraphicsView>
class Butterfly : public QObject,public QGraphicsItem
{
Q_OBJECT
public:
explicit Butterfly(QObject *parent = Q_NULLPTR);
void timerEvent(QTimerEvent *);
QRectF boundingRect() const;
signals:
public slots:
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); //重绘函数
private:
bool up;
QPixmap pix_up; //用于表示两幅蝴蝶的图片
QPixmap pix_down;
qreal angle;
Ui::ButterflyClass ui; //这个没啥用,可写可不写
};
Butterfly.cpp
#include "Butterfly.h"
#include <math.h>
const static double PI = 3.1416;
Butterfly::Butterfly(QObject *parent)
: QObject(parent)
{
up = true; //给标志蝴蝶翅膀位置的变量赋初值
pix_up.load("D:/coding/qtPractice/Butterfly/Butterfly/x64/Debug/up.jpg"); //调用QPixmap的load()函数加载所用到的图片
pix_down.load("D:/coding/qtPractice/Butterfly/Butterfly/x64/Debug/down.jpg");
startTimer(100); //启动定时器,并设置时间间隔为100毫秒
// ui.setupUi(this);
}
QRectF Butterfly::boundingRect() const
{
qreal adjust = 2;
return QRectF(-pix_up.width() / 2 - adjust, -pix_up.height