qt练习7 定时爆炸小游戏

本小游戏有3个重点.

1.信号与槽的使用

2.定时函数的使用

3.gif图片的显示

下面是布局:

sshot-2

当点击START后,数码管倒计时显示.其中可以按下stop来暂停时间减少.

如下是widget.h代码

  
    
#ifndef WIDGET_H
#define WIDGET_H

#include
< QWidget >
#include
< QTimer >
#include
< QLabel >

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public :
explicit Widget(QWidget * parent = 0 );
~ Widget();

private :
Ui::Widget
* ui;
int num; // 声明数码管初始化值对象
QTimer * timer; // 声明定时对象


public slots:
void mySlotStart(); // 声明3个公共槽
void mySlotCount();
void mySlotStop();
};

#endif // WIDGET_H




下面是widget.cpp代码:

  
    
#include " widget.h "
#include
" ui_widget.h "
#include
< QTimer >
#include
< QDebug >
#include
< QMovie >
#include
< QLabel >
#include
< QGridLayout >

Widget::Widget(QWidget
* parent) :
QWidget(parent),
ui(
new Ui::Widget)
{
ui
-> setupUi( this );
ui
-> lcdNumber -> display( 9 ); // 数码管显示9
timer = new QTimer( this ); // 为timer对象创建空间
num = 9 ;
// 点击Start按键时响应mySlotStart槽
connect(ui -> pushButtonStart,SIGNAL(clicked()),
this ,SLOT(mySlotStart()));
// timer可以用于定时,当时间到时,就会发出一个timeout()的信号.这个是循环的.
// 当timeout()信号发出后响应mySlotCount()槽.
connect(timer,SIGNAL(timeout()),
this ,SLOT(mySlotCount()));
// 点击Stop按键时响应mySlotStop槽.
connect(ui -> pushButtonStop,SIGNAL(clicked()),
this ,SLOT(mySlotStop()));

}

Widget::
~ Widget()
{
delete ui;
delete timer;
}


void Widget::mySlotStart()
{
// 定时器开始工作,初始值为1000
timer -> start( 1000 );
}

void Widget::mySlotCount()
{
// num自减
num -- ;
if (num <= 0 )
{
// 当减到0以后

QLabel
* label = new QLabel( this ); // 创建label
ui -> gridLayout -> addWidget(label, 0 , 0 , 2 , 2 ); // 让Label放在布局中,占满整个窗口
label -> setScaledContents( true ); // 图片自适应放大
QMovie * movie = new QMovie( " D:/Project/Qt/boom/boom.gif " );
label
-> setMovie(movie);
movie
-> start(); // 播放gif图片
label -> show(); // 让label显示
timer -> stop(); // 停止计数
}
// 数据在数码管上显示
ui -> lcdNumber -> display(num);
}

void Widget::mySlotStop()
{
// 定时器暂停工作
timer -> stop();
}

你可能感兴趣的:(游戏)