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

Qt QPainter画个球啊的更多相关文章

  1. Qt刷新机制的一些总结(Qt内部画的时候是相当于画在后台一个对象里,然后在刷新的时候调用bitblt统一画,调用window的api并不会影响到后面的那个对象)

    前段时间做过一个界面刷新的优化,遇到的坑比较多,在这里做一点点总结吧.     优化的方案是滚动滚动条的时候用截屏的方式代替界面全部刷新,优化完成后,界面在滚动时效率能提升大概一倍,背景介绍完毕.   ...

  2. Qt QPainter::end: Painter ended whith 2 saced states

    在使用Qt  QPainter 的时候,有时会遇到“QPainter::end: Painter ended whith 2 saced states” 这时由于我们在使用的QPanter.trans ...

  3. qt 中画线时如何设置笔的颜色和填充

    在上一次介绍中已经实现了自定义控件,并把Widget 放入了主界面中,画了一个圆,具体可参考“QT 自定义窗口” 下面我们介绍一下如何设置画笔颜色和所画图形的填充颜色. 画笔颜色: void Circ ...

  4. Qt ------ QPainter 和控件组件的重绘

    使用 QPainter 修改 QPaintDevice 的子类,如果 QPaintDevice 的子类也是 QWidget 的子类,比如自定义QWidget子类.QLabel等,需要把 QPainte ...

  5. Qt 怎么画一个圆角矩形对话框,或者圆角控件

    1. 2. 在自定义控件的 构造函数中加入如下一段断码 this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); //隐藏对话框标题 ...

  6. MATLAB之画确定区域内互不接触的球

    MATLAB之画确定区域内互不接触的球 程序要求:在确定区域内,画互不接触的球 输入:球的个数N,半径D,两球之间的最小距离K倍(D的倍数) 输出:各圆心的三维坐标,并作图显示 程序: functio ...

  7. Qt中图像的显示与基本操作

    Qt可显示基本的图像类型,利用QImage.QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放.旋转). 1. Qt可显示的图像类型 参考Qt的帮助文档,可支持的类型,即 ...

  8. QPainter类学习

    详细描述: QPainter类提供了许多高度优化的函数去做大部分的GUI绘制工作.它可以画从简单的线到复杂的形状.通常情况下,QPainter的使用是在widget当中的painter事件使用.记得在 ...

  9. 【转载】Qt中图像的显示与基本操作

    Qt可显示基本的图像类型,利用QImage.QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放.旋转). 参考:Qt中图像的显示与基本操作 - ykm0722的专栏 - ...

随机推荐

  1. FreeRTOS链表实现

    直接上源码分析 void vListInitialise( List_t * const pxList ){ pxList->pxIndex = ( ListItem_t * ) &( ...

  2. Postgres 10.11安装教程

    Postgres搭建 考虑到Drone和Sonarqube等都需要借助Postgres存储,为了保证CI服务的高效的工作,将考虑独立其中依赖的数据库,避免在繁忙时占用过多资源从而影响整体CI的速度. ...

  3. 【Azure云服务 Cloud Service】Cloud Service的实例(VM)中的服务描述Software Protection 与 Windows Defender, 如何设置Windows Defender Antivirus服务

    1)Software Protection 与 Windows Defender是两个独立的服务.在Windows 服务中他们的描述分别为 Software Protection Enables th ...

  4. C#Socket通讯(1)

    前言 因为自己需要开发一款自己的游戏,因为设计网络方面,所以我找了很多的资料,再加上考虑到Unity游戏客户端直接连接数据库很容易导致数据库泄露,再加上网上很多的服务端都是用控制台做的,所以我就想做个 ...

  5. Spring之IOC/DI(反转控制/依赖注入)_入门Demo

    在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new ob ...

  6. js堆排序

    堆的预备知识 堆是一个完全二叉树. 完全二叉树: 二叉树除开最后一层,其他层结点数都达到最大,最后一层的所有结点都集中在左边(左边结点排列满的情况下,右边才能缺失结点). 大顶堆:根结点为最大值,每个 ...

  7. 【5】TensorFlow光速入门-图片分类完整代码

    本文地址:https://www.cnblogs.com/tujia/p/13862364.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  8. Redis---03Redis事务

    一.Redis事务 1.简述: Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 2.作用: 主要作用就是串联多 ...

  9. Interface 接口详解

    简介 接口主要用来描述类具有哪些功能,并不给出每个功能的具体实现方式.一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了响应接口的对象. 在 Java 程序设计语言中,接口不是类,而是对 ...

  10. Spring入门-------------1

    Spring是一个开源框架,为简化企业级应用开发而生,使用Spring可以使简单的JavaBean 实现以前只有EJB才能实现的功能.Spring 是一个IOC和Aop容器框架. 特性: 轻量级:Sp ...