因为要做一个游戏,在线只是一个知识点例子,作下笔记而已。只给出伪代码,游戏作玩,开源发布!!!

这里有2个知识点

一个是QGraphicsItem的绘图。

一个是QGraphicsItem的碰撞。

实现绘图要重写:boundingRect()和paint();

一定要保证所有的绘图都要在boundingRect()的边界之中。

本次绘图代码如下:

QRectF Graphic::boundingRect()const{qreal penWidth=1;return QRectF(0-penWidth/2,0-penWidth/2,100,130);
}
void Graphic::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){painter->drawImage(QRectF(0,0,100,130),QImage(":/img/plane.png"));
}

图形视图框架提供了图形项之间的碰撞检测,碰撞检测可以使用两种方法来实现:
1.重新实现QPainterPath QGraphicsItem::shape()函数来返回图形项准确的形状,然后使用默认的collidesWithItem()
函数通过两个图形项形状之间的交集来判断是否发生碰撞。如果图形项的形状很复杂,那么进行这个操作是非常耗时

的。

2.如果没有重新实现shape()函数,那么它默认会调用boundingRect()函数返回一个简单的矩形。

这次就用boundingRect进行判断。

伪代码如下:

void Graphic::keyPressEvent(QKeyEvent *event){if(event->key()==Qt::Key_Down){moveBy(0,10);}if(event->key()==Qt::Key_Up){moveBy(0,-10);}if(event->key()==Qt::Key_Left){moveBy(-10,0);}if(event->key()==Qt::Key_Right){moveBy(10,0);}QList<QGraphicsItem *> list = collidingItems();if(!list.isEmpty()) {list.at(0)->hide();}
}

其中collidingItems返回与这个之碰撞的所有图像!

Qt工作笔记-使用QGraphicsItem加载图片并实现碰撞相关推荐

  1. Android 开发笔记 ListView异步加载图片

    当ListView需要在线获取数据,并且列表中需要显示图片时,友好的处理方式是使用异步加载图片的方式. 这是因为LIstView中显示的内容是分为两部加载的,第一次加载文本信息(包含图片的uri地址) ...

  2. Web前端笔记-two.js加载图片

    目前关于two.js的资料,国内的不是很多,项目中要加载图片,官方文档上没有关于加载图片的相关资料,但在github生态圈找到了,在此记录下. 如下图片: 图片路径: 在JS文件中导入图片: impo ...

  3. Web前端笔记-js中加载图片文件(vue cli中同样适用)

    这里主要是在vue cli项目中加载图片的时候会出现304,特别是使用自己写的js加载图片的时候,此博文记录了解决办法. 在js文件中引用文件 import img from '@/assets/im ...

  4. Qt工作笔记-使用QGraphicsItem绘制复杂的图形

    程序运行截图如下: 原理:使用QPainter一个部分,一个部分的画 源码: mygraphicsitem.h #ifndef MYGRAPHICSITEM_H #define MYGRAPHICSI ...

  5. OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移、缩放和旋转操作

    OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移.缩放和旋转操作 C3DWidget.h #pragma once#include <QtWidgets/QApplic ...

  6. Qt 中实现在控件中点击鼠标,就在鼠标点击处加载图片的方法

    首先应该知道,QLabel类是没有点击事件的.我们需要点击鼠标,那么必须重写一个QLabel类去继承原来的QLabel.比如说我定义PutPicLabel来继承QLabel. 在头文件中应该这么写: ...

  7. Qt 加载图片文件路径详解

    QT 加载文件,图片路径很容易搞混,需要注意的是WINDOW路径分隔符为"\",QT为"/",我遇到的路径加载总结为三种情况: (1)绝对路径,文件的整个路径, ...

  8. 【QT】添加图片资源并使用QImage加载图片显示

    文章目录 一.QT工程添加图片资源 二.QT工程使用QImage加载图片显示 一.QT工程添加图片资源 到了此步,按下Ctrl+s按键即可. 此时可看到工程下多了以下文件. 二.QT工程使用QImag ...

  9. 【Qt】QPixmap加载图片报错:Corrupt JPEG data: premature end of data segment Didn‘t expect more than one scan

    1.问题描述 在使用QPixmap加载图片时失败,错误信息如下 Corrupt JPEG data: premature end of data segment Didn't expect more ...

最新文章

  1. pip安装模块警告InsecurePlatformWarning: A true SSLContext object is not available.
  2. js学习总结----获取数组最大值
  3. CABasicAnimation使用总结
  4. top.location.href和localtion.href代码剖析
  5. 5个Vue.js项目的令人敬畏的模板
  6. [CB]将窗体从属于主窗体
  7. php遍历文件夹及其子文件夹并计算所占的磁盘空间
  8. 人脸识别的前世今生:从人工特征的百花齐放到深度学习的一统江湖
  9. Maven发布web项目到tomcat
  10. javascript xml转json
  11. 随想录(rtos和一般os的区别)
  12. PCL之体素网格滤波器--VoxelGrid
  13. python自定义抛出异常信息_浅谈python抛出异常、自定义异常, 传递异常
  14. create-react-app脚手架中配置webpack的方法
  15. 共享锁 排他锁 是什么区别
  16. 谷歌浏览器下载更新(附带谷歌安装包百度云)
  17. pycharm 设置环境变量
  18. vue获取剪切板内容_Vue实现剪贴板复制功能
  19. 前端系列——vue2+高德地图web端开发(地图控件)
  20. 人性面前,有多少感情能够经得起考验

热门文章

  1. 代码不规范?985,211也不要!
  2. Linux学习笔记之系统路径和命令
  3. 如何隐藏win32 console application的console窗口
  4. MFC返回的临时对象指针成因?
  5. 亲密接触VC6.0编译器
  6. 前端工程师技术精进路上,你被卡在哪里了?
  7. 经典面试题(6):NaN 是什么?如何测试一个值是否等于 NaN ?
  8. mysql如何计算qps_如何计算MySQL中的QPS及TPS指标
  9. AJHG | 人类遗传学领域一流期刊推荐
  10. 鉴定5分钟,准确率95.64% | 微生物所付钰组实现了微生物单细胞水平的快速准确鉴定...