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. phpstorm10.0.3 下载与激活

    phpstorm10.0.3 百度网盘下载   提取码: kqvc 激活服务器: http://jetbrains.tencent.click/ (2016-09-19 可用) http://owo. ...

  2. 插件下载地址 ext

    ext2.2.0  http://files.cnblogs.com/files/chenghu/ext-2.2.zip http://files.cnblogs.com/files/chenghu/ ...

  3. 【转】Python3 如何优雅地使用正则表达式(完整版)

    转载自鱼c论坛 :  https://fishc.com.cn/thread-57073-1-1.html 注:本文翻译自 Regular Expression HOWTO,小甲鱼童鞋对此做了一些注释 ...

  4. CDH+Kylin三部曲之二:部署和设置

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. linux 手动配置ip地址方法

    手工配置静态的IP地址 也就是手工配置IP地址.子网掩码.网关和DNS. 设置方法如下: vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑本地网卡的配置文 ...

  6. 蓝桥杯2020 E:七段码

    题解 正规解法是 dfs + 并查集,首先用 dfs 将其所有的情况枚举出来,再用并查集来判断是否在一个连通块上. 许多小伙伴计算的答案为76,主要是判断连通块这方面有问题,倘若不用并查集,直接枚举一 ...

  7. 5年Android程序员面试字节跳动两轮后被完虐,请查收给你的面试指南

    大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助. 最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了- 所以 ...

  8. Vue(学习第三部 自动化工具 [vue-cli])

    目录 Vue自动化工具(Vue-cli) 安装nide.js npm 安装Vue-sli 使用Vue-处理初始化创建起那段项目 vue项目执行流程图 单文件组件的使用 template 编写HTML代 ...

  9. vue 中v-if 与v-show 的区别

    相同点或者说功能,都可以动态操作dom元素的显示隐藏 不同点: 1.手段:v-if是动态的向DOM树内添加或者删除DOM元素:v-show是通过设置DOM元素的display样式属性控制显隐: 2.编 ...

  10. java并发编程与多线程基础学习一

    学习url:https://www.cnblogs.com/lixinjie/p/10817860.html https://www.cnblogs.com/JJJ1990/p/10496850.ht ...