09 qt画图与贪吃蛇游戏的实现

前面我们用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)

  1. 蛇就在窗口里的paintEvent里画出来的(可以改造前面的看图程序, 实现数码相册的功能).

  2. 捕扣用户的按键事件。 重写窗口对象的keyPresseEvent虚函数

  3. 蛇每次吃到食物时,节点变多一节, 蛇节点数是不固定。用QList来存放每个节点的数据. 每个节点都 有x, y坐标, 用QPoint类对象存放.

完整工程,下载地址:
http://download.csdn.net/detail/jklinux/9840246 (已修正)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值