Qt QPainter画个球啊

看效果

方法

  1. 使用绘图事件,绘制一个图形
  2. 使用定时事件,不停更新图形位置

代码

.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();
}

最新文章

  1. Memo
  2. Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互
  3. eclipse 和 android studio 快捷键对比
  4. VS2010 MSDN配置
  5. html readme
  6. easyeclipse for php 如何默认显示行号
  7. java中关于json传图片的方法
  8. 20160507-hibernate入门
  9. struts2的工作机制
  10. Visual Studio2013创建、公布监控Windows Azure网站
  11. 计算机存储负数以及int转byte时-128的出现
  12. MySQL中Left Join和Right Join的理解
  13. JavaScript必知的特性(继承)
  14. IDE-Android Studio -FAQ-使用习惯(不断更新 欢迎留言)
  15. 《java入门第一季》之面向对象(代码块一网打尽)
  16. Android Studio Gradle Configuration Errors总结
  17. LeetCode(106):从中序与后序遍历序列构造二叉树
  18. top-adx-apps
  19. Form 表单验证
  20. win10下安装Jenkins

热门文章

  1. 第六章 Linux系统之文件管理
  2. 【转】Python3 如何优雅地使用正则表达式(完整版)
  3. OpenCV计算机视觉学习(7)——图像金字塔(高斯金字塔,拉普拉斯金字塔)
  4. Android测试工具 UIAutomator介绍
  5. java-try catch中return在finally之前 还是之后执行
  6. web应用部署(Tomcat,springboot部署方式)
  7. cookie和webstorage
  8. 2020年Android开发最新整理阿里巴巴、字节跳动、小米面经,你不看看吗?
  9. python实现非常有趣的数学问题
  10. python数据类型之Number(数字)