Qt实践项目打地鼠之----单例模式与自定义信号(终结篇)[附GitHub项目下载地址]

本项目的下载地址:戳此访问

这一篇实现数码管的显示,鼠标的图标的改变和一种新的设计模式--单例模式.

这个终极篇拖了好久,着实惭愧.今夜是中秋佳节,所以今夜我就对这个打地鼠的小游戏做一个了断吧.

先介绍到单例模式.

所为单例模式就是C++编程的一个小技巧,它是全局变量的替代品.即我们定义一个类,使得这个类只能获得一个对象,

#ifndef HANDLER_H
#define HANDLER_H

#include <QObject>

class handler : public QObject
{
    Q_OBJECT
public:
    //静态不用实例化就可以之间调用
    static handler* getInstance();//只能获得一个对象实现单例模式
    void addScore();
private://改成private的目的是在类外不能新建对象实现数据的封闭
    explicit handler(QObject *parent = nullptr);

signals:
    void beatMouse();//人为发送信号,函数声明
private:
    static handler* hand;

public slots:
};

#endif // HANDLER_H

handler.cpp为:

#include "handler.h"



handler::handler(QObject *parent) : QObject(parent)
{

}

handler* handler::hand = new handler;//静态成员变量的初始化方式

handler *handler::getInstance()
{
    return hand;//具有全局变量的特性
}

void handler::addScore()
{
    emit beatMouse();
}

有了handler类我们在mainwindow.cpp中添加进handler的头文件,然后在构造函数中初始化,进入添加信号与槽,定义分数变量用来显示在数码管中,具体如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QMessageBox>
#include<handler.h>//通过handler发射信号包含进来头文件

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    scene = new myScene(this);
    this->ui->graphicsView->setScene(scene);//在容器内设置场景

    //开始按钮的设置
    connect(ui->btn_start,&QPushButton::clicked,this->scene,&myScene::startGame);
    connect(ui->btn_pause,&QPushButton::clicked,this->scene,&myScene::pauseGame);
    connect(ui->btn_end,&QPushButton::clicked,this->scene,&myScene::stopGame);
    this->score = 0;//初始化为0
    handler* hand = handler::getInstance(); //这一行代码是获取实例的意思,就是通过getInstance()函数获取hand对象
    connect(hand,&handler::beatMouse,this,&MainWindow::updateScore);
}

显示分数的函数如下:

void MainWindow::updateScore()
{
    this->score+=10;//每打一次加10分
    this->ui->lcdNumber->display(this->score);//将打老鼠的次数显示在数码管上
}

至此数码管可以正常显示分数了.

随后更改鼠标点击的样式和打击老鼠时背景图的切换.

对于鼠标的样式,只要重写事件函数即可,分别在鼠标按下事件和鼠标抬起事件中添加语句:

this->setCursor(QCursor(QPixmap(":/mouse/picturedown.png")));

至此,打地鼠的项目就写完了,这个例子不是很简单,设计的东西很多,自己还需要多消化.

                               

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子孤岛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值