Qt QPainter画个球啊
看效果

方法
- 使用绘图事件,绘制一个图形
- 使用定时事件,不停更新图形位置
代码
.h
#pragma once
#include <QWidget>
#include <QPaintEvent>
#include <QTimerEvent>
#define STEP 3 // 球移动的步长
#define WIDTH 50 // 球的宽度
#define HEIGHT 50 // 球的高度
class painterTest : public QWidget
{
Q_OBJECT
public:
painterTest(QWidget *parent = nullptr);
~painterTest();
protected:
virtual void paintEvent(QPaintEvent *event);
virtual void timerEvent(QTimerEvent *event);
private:
int px = 0; // x轴位置
int py = 0; // y轴位置
bool xState = true; // x轴移动状态
bool yState = true; // y轴移动状态
};
.cpp
#include "painterTest.h"
#include <QPainter>
#include <QBrush>
#include <QPixmap>
#include <QDir>
#include <QCoreApplication>
painterTest::painterTest(QWidget *parent)
: QWidget(parent)
{
this->startTimer(10);
}
painterTest::~painterTest()
{
}
void painterTest::paintEvent(QPaintEvent *event)
{
QPainter * pt = new QPainter(this);
pt->setPen(Qt::blue);
pt->setBrush(Qt::lightGray);
// 绘制一个背景
pt->drawRect(this->rect());
// 绘制一个图片
pt->drawPixmap(px, py, WIDTH, HEIGHT, QPixmap(QDir(qApp->applicationDirPath()).absoluteFilePath("./football.png")));
}
void painterTest::timerEvent(QTimerEvent *event)
{
/**
* 判断
* 如果小球x轴位置到达 窗口左边界减去小球本身的宽度 的位置
* 将小球的移动状态设置为向右移动
* 否则将小球的移动状态设置为向左移动
*/
if (this->width() - WIDTH < px)
{
xState = false;
}
else if (!(0 < px))
{
xState = true;
}
/**
* 判断
* 如果小球y轴位置到达 窗口底边界减去小球本身的高度 的位置
* 将小球的移动状态设置为向上移动
* 否则将小球的移动状态设置为向下移动
*/
if (this->height() - HEIGHT < py)
{
yState = false;
}
else if (!(0 < py))
{
yState = true;
}
/**
* 判断小球的移动状态
* 选择将小球的位置加步长或减步长
*/
if (xState)
{
px += STEP;
}
else
{
px -= STEP;
}
if (yState)
{
py += STEP;
}
else
{
py -= STEP;
}
// 更新绘图
this->update();
}
完