09 qt画图与贪吃蛇游戏的实现
来源:互联网 发布:ce教程找怪物数组基址 编辑:程序博客网 时间:2024/04/29 03:48
前面我们用QLabel对象来显示图像,QLabel对象本身也是一个窗口, 意味着窗口对着需要刷新时,共需要刷新两个窗口(其中一个是QLabel对象). 这样效率不高。 窗口对象其实也是画出来的,如在窗口对象在画出来时,也把图像直接画出来的,这样可以少画出一个子窗口对象.这样可以提高效率。
重新实现QWidget的虚函数. 此虚函数会在窗口重画时触发, 注意不是直接调用的.
virtual void paintEvent(QPaintEvent *event)
我们可以在这个函数里写上要画的什么东西的代码.
通常通过调用QPainter类对象来画.
QPainter对象一般都是在paintEvent函数里创建对象,并指定的操作对象.
QPainter提供了以下函数成员,用于画图.
drawPoint(), drawPoints(), drawLine(), drawRect(), drawRoundedRect(), drawEllipse(), drawArc(), drawPie(), drawChord(), drawPolyline(), drawPolygon(), drawConvexPolygon() and drawCubicBezier().
而且,可以设置QPainter的画笔(画出来的线条是怎样的,粗细,顔色,风格等)
void setPen(const QPen &pen)
void setPen(const QColor &color)
void setPen(Qt::PenStyle style)
// 具体的风格可以在帮助文档里查看
还可以设置QPainter的画刷(即画出来的图像内部是填充什么颜色,图像, 风格等)
void setBrush(const QBrush &brush)
void setBrush(Qt::BrushStyle style)
当需要画出字符时,还可以设置QPainter的字体。
void setFont(const QFont &font)
////////////////////////////////////////////////////////////
贪吃蛇的游戏实现:
1. 需要定时移动蛇, 可用定时器QTimer. 定时器对象超时会发出timeout信号, 需要把这个信号连接到时间处理的槽函数。并调用窗口对象的repaint成员触发paintEvent.
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000)
蛇就在窗口里的paintEvent里画出来的(可以改造前面的看图程序, 实现数码相册的功能).
捕扣用户的按键事件。 重写窗口对象的keyPresseEvent虚函数
蛇每次吃到食物时,节点变多一节, 蛇节点数是不固定。用QList来存放每个节点的数据. 每个节点都 有x, y坐标, 用QPoint类对象存放.
完整工程,下载地址:
http://download.csdn.net/detail/jklinux/9840246 (已修正)
- 09 qt画图与贪吃蛇游戏的实现
- Qt版贪吃蛇游戏
- Qt贪吃蛇游戏(2):
- Qt制作贪吃蛇游戏
- QT实现贪吃蛇
- 贪吃蛇游戏实现
- 基于Qt 的贪吃蛇实现
- C++实现的贪吃蛇游戏
- 贪吃蛇游戏的MIDP实现
- 贪吃蛇游戏的C语言实现
- 简单贪吃蛇游戏的C++实现
- JavaScript 贪吃蛇游戏的实现
- H5实现的贪吃蛇游戏
- 用C++实现的贪吃蛇游戏
- 简单的贪吃蛇游戏实现
- 简单的贪吃蛇游戏实现
- 贪吃蛇的游戏
- Java贪吃游戏的实现
- Python挑战游戏汇总
- 【iOS_Development】frame VS bounds
- testparm命令
- Linux软连接和硬链接
- pymysql连接数据库
- 09 qt画图与贪吃蛇游戏的实现
- 电商那些年,我摸爬打滚出的高并发架构实战精髓(2017-03-27 YYQ DBAplus社群)
- 适配手机端的几种写法
- java 集合类结构分析
- 短信验证码
- Mule性能分析
- 单元测试神器Mockito详细剖析
- Spring整合redis(较新版)
- 求两个数的交集,使用map容器和vector容器