QT 项目 智能家居系统 上位机

QT 项目 智能家居系统 上位机_第1张图片

有哪些文件  :

头文件:

1. auidio .h  语音识别 模块

2. camera.h  人脸识别登录模块

3. chooselevelscene.h  翻金币游戏的 

4. dataconfig.h   翻金币游戏的 关卡 的数据 

5.entry_mode.h 登录方式的界面类

6.luck_draw.h   开心一天的界面类

7.mainsence.h 翻金币游戏的背景图片的类 

8.mainwindow.h  2048 游戏类

9. misic_display.h  音乐播放器的类

10.mycoin.h  翻金币游戏类  金币的构造类

11.mypushbutton.h  翻金币自定义类的 按钮

12. playscene.h  翻金币的音乐播放,成功判断类

13. register.h 账号密码的注册界面  

14. sign_in.h 账号登录模块

15.sql.h  数据库sqlite3 模块

16.start_home.h  智能家具模块

17.tcp_image.h  远程监控模块

18.weather_forecast.h  天气预报模块

19. widget .h  主界面类



.cpp 文件

1. auidio .cpp  语音识别 模块

2. camera.cpp  人脸识别登录模块

3. chooselevelscene.cpp   翻金币游戏的 

4. dataconfig.cpp    翻金币游戏的 关卡 的数据 

5.entry_mode.cpp    登录方式的界面类

6.luck_draw.cpp     开心一天的界面类

7.mainsence.cpp    翻金币游戏的背景图片的类 

8.mainwindow.cpp    2048 游戏类

9. misic_display.cpp    音乐播放器的类

10.mycoin.cpp    翻金币游戏类  金币的构造类

11.mypushbutton.cpp    翻金币自定义类的 按钮

12. playscene.h  翻金币的音乐播放,成功判断类

13. register.h 账号密码的注册界面  

14. sign_in.h 账号登录模块

15.sql.h  数据库sqlite3 模块

16.start_home.h  智能家具模块

17.tcp_image.h  远程监控模块

18.weather_forecast.h  天气预报模块

19. widget .h  主界面类

20.mian.cpp  



代码:

1. auidio .h  语音识别 模块  (//密钥不给,自己百度云)

#ifndef AUDIO_H
#define AUDIO_H

#include 
/******** 音频相关类 *********/
#include  //音频属性类
#include  //音频参数
#include   //音频输入
#include  //音频输出
/******** 文件相关类 **********/
#include 
/******** 文字转语音类 ********/
#include 
/******* 网络相关类 ****/
#include  /** 网络访问类 ***/
#include  /** 网络数据结果类 ***/

/******* QJSON 相关类 *****/
#include 
#include 
#include 

#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class Audio; }
QT_END_NAMESPACE

class Audio : public QWidget
{
    Q_OBJECT

public:
    Audio(QWidget *parent = nullptr);
    ~Audio();
     void audio_display(QString a);//文字播放
     void Event_judgment(QString a);//事件判断

signals://信号
    void audio_hide1();//当前界面隐藏,主界面显示信号
    //void enter_audio();//进入语音识别
    void enter_luck_draw1();//进入快乐一天
    void enter_music1();//进入音乐播放
    void enter_home1();//进入智能家具
    void enter_tcp1();//进入远程监控
    void enter_weather1();//进入天气预报

    void control_home(int a);
    void control_music_open();
    void control_music_close();
    void control_shangyishou();
    void control_xiayishou();


private:
    Ui::Audio *ui;
    QAudioInput *m_AudioInput;
    QAudioOutput *m_AudioOutput;
    QFile *m_file;
    QTextToSpeech *m_speech;//文字转语音对象

    QNetworkAccessManager *m_http; /**网络访问对象 **/
    QNetworkAccessManager *m_music;// 英语对象
    /***** 百度人脸库秘钥 ****/
    QString AppID = "";//密钥不给,自己百度云
    QString API_Key = "";
    QString Secret_Key = "";
    QString access_token = "";
    QMediaPlayer* media_player;
public slots:
    void slot_pushButton_input();
    void slot_pushButton_output();
    void slot_AudioOutput(QAudio::State state);
    void slot_pushButton_transition();
    void slot_http_finished(QNetworkReply* Reply);
    void slot_music_finished(QNetworkReply* Reply);
    void slot_pushButton_discern();
    void slot_surface_show();//界面显示槽函数函数
    void bofang_liu();//播放小刘同学


private slots:
    void on_pushButton_tianqi_clicked();
    void on_pushButton_jiaju_clicked();
    void on_pushButton__clicked();
    void on_pushButton_yinyue_clicked();
    void on_pushButton_kuaile_clicked();
    void on_pushButton_surface_clicked();
};
#endif // AUDIO_H

2. camera.h  人脸识别登录模块 //密钥不给,自己百度云

#ifndef CAMERA_H
#define CAMERA_H

#include 
/******* 摄像头相关类 *****/
#include  /*** 摄像头类 ***/
#include  /*** 系统摄像头属性类 ***/
#include  /*** 用于记录摄像头数据的类 ***/

#include  /*** debug 调试类 ****/
/******* 网络相关类 ****/
#include  /** 网络访问类 ***/
#include  /** 网络数据结果类 ***/

/******* QJSON 相关类 *****/
#include 
#include 
#include 

#include  //消息类
#include 

#include "widget.h"


QT_BEGIN_NAMESPACE
namespace Ui { class Camera; }
QT_END_NAMESPACE

class Camera : public QMainWindow
{
    Q_OBJECT

public:
    Camera(QWidget *parent = nullptr);
    ~Camera();



private:
    Ui::Camera *ui;
    QCamera *m_Camera; /*** 摄像机类对象 ***/
    QCameraImageCapture *CameraImageCapture; /*** 用于记录摄像头数据的类 ***/
    QNetworkAccessManager *m_http; /**网络访问对象 **/
    /***** 百度人脸库秘钥 ****/
    QString AppID = "";
    QString API_Key = "";
    QString Secret_Key = "";
    QString access_token = "";
    int pixmap_init=0;//图片是否拍摄
    Widget *ddd;
public slots:
    void slot_pushButton_camrae_open();
    void slot_CameraImageCapture(int id,QImage image);
    void slot_pushButton_capture();
    void slot_http_finished(QNetworkReply* Reply);
    void slot_pushButton_regiset();
    void slot_pushButton_find();

signals:
    camera_open();//打开摄像头


};
#endif // CAMERA_H

3. chooselevelscene.h  翻金币游戏的 

#ifndef CHOOSELEVELSCENE_H
#define CHOOSELEVELSCENE_H

#include 
#include "playscene.h"

class ChooseLevelScene : public QMainWindow
{
    Q_OBJECT
public:
    explicit ChooseLevelScene(QWidget *parent = 0);
    //重写绘画事件
    void paintEvent(QPaintEvent *);
    //游戏场景的对象指针
    PlayScene * paly = NULL;

signals:
    //写一个自定义的信号,告诉主场景,点击了返回
    void chooseSceneBack();

public slots:
};

#endif // CHOOSELEVELSCENE_H

4. dataconfig.h   翻金币游戏的 关卡 的数据 

#ifndef DATACONFIG_H
#define DATACONFIG_H

#include 
#include //STL 地图
#include //STL  动态数组

class dataconfig : public QObject
{
    Q_OBJECT
public:
    explicit dataconfig(QObject *parent = 0);

    QMap > >mData;//一个地图
    //地图的 key  是 int 类型   value  是 int 的二维的数组QVector< QVector >

signals:

public slots:
};

#endif // DATACONFIG_H

5.entry_mode.h 登录方式的界面类

#ifndef ENTRY_MODE_H
#define ENTRY_MODE_H

#include 
#include "camera.h"  //人脸识别
#include "sign_in.h"  // 账号密码
namespace Ui {
class Entry_mode;
}

class Entry_mode : public QWidget
{
    Q_OBJECT

public:
    explicit Entry_mode(QWidget *parent = 0);
    ~Entry_mode();
    Camera * a1;
    Sign_in * a2;




private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::Entry_mode *ui;
};

#endif // ENTRY_MODE_H

6.luck_draw.h   开心一天的界面类

#ifndef LUCK_DRAW_H
#define LUCK_DRAW_H


#include //基类
#include //画家类
#include //QRadialGradient类与QBrush一起使用来指定径向渐变刷。
#include 
/*QPainterPath用途:它是由一些图形如曲线、矩形、椭圆组成的对象。主要的用途是,能保存已经绘制好的图形。
 * 实现图形元素的构造和复用;图形状只需创建一次,然后调用QPainter::drawPath()函数多次绘制。
 * painterpath可以加入闭合或不闭合的图形(如:矩形、椭圆和曲线)。QPainterPath 可用于填充,
 * 描边,clipping。
*/
#include //定时器
#include //调试输出
#include //鼠标事件
#include //按钮
#include //时间
#include // 标签类
#include  //LineEdit 编辑器的 类
#include // map 类
#include //map 迭代器

#include 
#define MAX_CIRCLE  1800
namespace Ui {
class luck_draw;
}

class luck_draw : public QWidget
{
    Q_OBJECT

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

signals://信号
    void luck_hide2();//当前界面隐藏,主界面显示信号
    void enter_audio2();//进入语音识别
    //void enter_luck_draw();//进入快乐一天
    void enter_music2();//进入音乐播放
    void enter_home2();//进入智能家具
    void enter_tcp2();//进入远程监控
    void enter_weather2();//进入天气预报

private:
    Ui::luck_draw *ui;
    void gradientArc(QPainter *painter,int radius,int startAngle,int angleLength,int arcHeight,QRgb color);
    //painter  画家类的对象   radius  半径       startAngle 起始角度     angleLength角度长度   arcHeight弧形高度   color颜色
public slots:
    void updatePaint();
    void btnClicked();
    void reResult(int re);
    void stopRotate();
    void slot_surface_show();//界面显示槽函数函数
signals:
    void sigResult(int re);//信号
private:
    int m_nRotationAngle;//旋转角度
    int m_nRo;
    quint32 m_T;
    QString m_Re;
    QTimer *m_timer;//定时器1
    QTimer *timer;//定时器2
    int m_i;
    QPushButton *m_btn;
    bool isDefault;
    enum Awards{
        Spe = 3,
        First = 7,
        Second = 5,
        Third = 2,
        Luck_Fir = 6,
        Luck_Sec = 1,
        ThanK_Fir = 4,
        Thank_Sec = 0,
    };
    Awards m_award;
    QLabel *m_labTr;
    QLabel *m_labRe;
    QLineEdit *m_ldeRe;
    QMap m_map;
    QMap returnResult(int re);
    static QString showAwards(Awards award);
    void stopInit();
    int getRand();//获取奖项 的编码,
protected:
    void paintEvent(QPaintEvent *);// 重写绘图事件

private slots:
    void on_pushButton_tianqi_clicked();
    void on_pushButton_jiaju_clicked();
    void on_pushButton_jiankong_clicked();
    void on_pushButton_yinyue_clicked();
    void on_pushButton_yuyin_clicked();
    void on_pushButton_surface_clicked();
};

#endif // LUCK_DRAW_H

7.mainsence.h 翻金币游戏的背景图片的类 

#ifndef MAINSENCE_H
#define MAINSENCE_H

#include 
#include 
#include 
#include 

namespace Ui {
class Mainsence;
}

class Mainsence : public QMainWindow
{
    Q_OBJECT

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

    //重新paintEvent 事件, 画背景图
    void paintEvent(QPaintEvent *);//括号里面是数据类型,不需要写参数,没事

    ChooseLevelScene * chooseScene =NULL;

private:
    Ui::Mainsence *ui;
};

#endif // MAINSENCE_H

8.mainwindow.h  2048 游戏类

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define NEWBLOCK rand()%2+1 // 随机新方块的值
#define NEWPOINT rand()%EDGE // 随机新方块的坐标
#define EDGE 4 // 4x4棋盘
#define WINWIDTH 600 //窗口宽度
#define WINHEIGHT 800 // 窗口高度

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    Ui::MainWindow *ui;
    int Game[EDGE][EDGE];
    int TempGame[EDGE][EDGE];
    int tempscore=0;
    int score=0;
    int temprun=0;
    int run=0;
    int presstype=0;
    int gametype=0;
    bool test=false;
    bool OK;
    bool gameover=false;
    QString inputInfo;
    QString tempInfo;
    QString gmode="Classic";
    void keyPressEvent(QKeyEvent *);
    void paintEvent(QPaintEvent *event);
    void newGame();
    void goUp();
    void goDown();
    void goLeft();
    void goRight();
    void newBlock();
    void setTempGameArray();
    void setGameArray();
    void moveSound();
    void backGroundSound();
    void timeCounter();
    bool ifArraySame();
    bool ifWin();
    bool ifFail();
    bool ifFull();
};

#endif // MAINWINDOW_H

9. misic_display.h  音乐播放器的类

#ifndef MISIC_DISPLAY_H
#define MISIC_DISPLAY_H

#include 
#include //打开音乐
#include //播放音乐
#include 
#include 
#include 
#include 

namespace Ui {
class Misic_display;
}

class Misic_display : public QWidget
{
    Q_OBJECT

public:


signals://信号
    void music_hide3();//当前界面隐藏,主界面显示信号
    void enter_audio3();//进入语音识别
    void enter_luck_draw3();//进入快乐一天
    //void enter_music();//进入音乐播放
    void enter_home3();//进入智能家具
    void enter_tcp3();//进入远程监控
    void enter_weather3();//进入天气预报

public:
    explicit Misic_display(QWidget *parent = 0);
    ~Misic_display();
    void setVolume(qint8 a);//控制音量
    void fileInit();
    void music_display_1(int vlaue);//播放本地资源
    void music_display_2(int vlaue);//播放后来加进来的 音乐
    void GetMusicName();//获取播放列表的音乐名字
    void Load_music();//加载播放歌曲的路径
    void MusicPlaybackMode();//音乐播放模式,对应的音乐结束的接下来的播放对象

private slots:
    void on_pushButton_1_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_4_clicked();

    void on_listWidget_doubleClicked(const QModelIndex &index);
    void setHide();//设置界面隐藏
    void setShow();//设置界面显示
    void slot_surface_show();//界面显示槽函数函数

    void on_pushButton_yuyin_clicked();

    void on_pushButton_jiaju_clicked();

    void on_pushButton_jiankong_clicked();

    void on_pushButton_tioanqi_clicked();

    void on_pushButton_kuaile_clicked();

    void on_pushButton_surface_clicked();

private:
    Ui::Misic_display *ui;
    QMediaPlayer * mediaPayer;//控制文件的播放
    QStringList musicList_name;//播放歌曲的名字
    QStringList musicList;//加载播放列表的路径
    int display_number=0;//播放歌曲的第n 首
};

#endif // MISIC_DISPLAY_H

10.mycoin.h  翻金币游戏类  金币的构造类

#ifndef MYCOIN_H
#define MYCOIN_H

#include 
#include 
#include 
#include 
#include 

class MyCoin : public QPushButton
{
    Q_OBJECT
public:
    //explicit MyCoin(QWidget *parent = 0);
    //参数表示 传进来的金币路径  还是银币路径
    MyCoin(QString btnImg);

    //金币的属性
    int posX;//x坐标
    int posY;//y坐标
    bool flag;//正反的标志


    void changeFlag();//改变金币的状态
    QTimer *timer1;//正面翻反面的定时器
    QTimer *timer2;//反面翻正面的定时器
    int min=1;//图片的最小号码数
    int max=8;//图片的最大号码数

    //执行动画  标志
    bool isAnimation = false;// 判断他是否在执行翻转的操作 防止用户狂点的行为

    //重写 鼠标按下的事件
    void mousePressEvent(QMouseEvent * e);

    //设置一个是否可以翻转的标志
    bool ispaly=true;

signals:

public slots:
};

#endif // MYCOIN_H

11.mypushbutton.h  翻金币自定义类的 按钮

#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H

#include 
#include 
#include 
#include 
#include 

class mypushbutton : public QPushButton
{
    Q_OBJECT
public:
    //explicit mypushbutton(QWidget *parent = 0);
    //构造函数 参数1 正常显示的图片路径 参数2 按下后显示的图片的路径
    mypushbutton(QString normalImg,QString pressImg = "");

    //成员属性 保存用户传入的默认显示路径 以及按下后显示的图片路径
    QString normaLImgPath;
    QString pressImgPath;


    //弹跳特效
    void zoom1();//向下跳
    void zoom2();//向上跳

    //重写按钮  按下 和 释放事件
    void mousePressEvent(QMouseEvent * e);//按下

    void mouseReleaseEvent(QMouseEvent * e);//释放

signals:

public slots:
};

#endif // MYPUSHBUTTON_H

12. playscene.h  翻金币的音乐播放,成功判断类

#ifndef PLAYSCENE_H
#define PLAYSCENE_H

#include 
#include "mycoin.h"

class PlayScene : public QMainWindow
{
    Q_OBJECT
public:
    //explicit PlayScene(QWidget *parent = 0);
    PlayScene(int levelNum);//构造函数
    int levelIndex;//内部成员属性;记录所选的关卡数字

    //重写paintEvent事件
    void paintEvent(QPaintEvent * );

    int gameArray[4][4];//二维数组 维护每个关卡的具体数据


    //下面这个指针数组是用来存储 金币的  就是下一个关卡的所有的金币对象
    MyCoin * coinBtn[4][4];//维护上一个数组的数据正常

    //是否胜利的标志
    bool isWin;

signals:
    void chooseSceneBack();

public slots:
};

#endif // PLAYSCENE_H

13. register.h 账号密码的注册界面  

#ifndef REGISTER_H
#define REGISTER_H

#include 
#include //数据库
#include //数据库执行类
#include //数据库错误信息
#include  //按键封组  主要是 sex 哪里
#include  //输出头文件
#include "sql.h"
#include  /*** 消息对话框 ***/

namespace Ui {
class Register;
}

class Register : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Register *ui;
    QButtonGroup *block1;//私有的分组变量
    QSqlDatabase db; /** 数据库句柄 **/
public slots:
    void register_return_show();//当前界面显示
    void register_return_hide();//当前界面隐藏
    QString getUser();//获取账号信息
    QString getPassword();//获取密码信息
    QString getSex();//返回性别信息
    int getAge();//返回年龄

signals:
     void regsiter_close();//窗口关闭信号

public:
    void Init();//初始化函数, 功能: 建立信号的连接,(显示密码部分) (登录,注册按) 占位符的提示语句
    QSqlDatabase* getQsqlDatabase();//获取数据库的句柄


};

#endif // REGISTER_H

14. sign_in.h 账号登录模块

#ifndef SIGN_IN_H
#define SIGN_IN_H

#include 
#include //数据库
#include //数据库执行类
#include //数据库错误信息
#include "register.h"//注册类 注册界面
#include  //输出头文件
#include "widget.h"

namespace Ui {
class Sign_in;
}

class Sign_in : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Sign_in *ui;
    Register * register1;//包含一个注册类
    Widget * widget1;//包含一个主界面的类

public:
     QSqlDatabase getSql();//获取当前的数据库

public slots://槽函数
     void sign_in_return_show();//显示当前界面显示函数
     void sign_in_return_hide();//当前函数隐藏函数

public:
     void lineEdit_pass_open();//开启密码保护
     void lineEdit_pass_close();//关闭密码保护
     void Init();//初始化函数, 功能: 建立信号的连接,(显示密码部分) (登录,注册按) 占位符的提示语句
     QString getUser();//获取账号信息
     QString getPassword();//获取密码信息


};

#endif // SIGN_IN_H

15.sql.h  数据库sqlite3 模块

#ifndef SQL_H
#define SQL_H
#include 
#include 
#include //数据库
#include //数据库执行类
#include //数据库错误信息
class People
{
public:
    People(QString user="",QString passwordd="",QString sex="",QString age=0):m_user(user),m_passWord(passwordd),m_sex(sex),m_age(age){}//构造函数
    ~People(){}//析构函数
    QString m_user;
    QString m_passWord;
    QString m_sex;
    QString m_age;

public:
    bool operator ==(const People & a) const//重载   等于运算符号
    {
        if(this->m_user==a.m_user)
        {
            if(this->m_passWord==a.m_passWord)
            {
                if(this->m_sex==a.m_sex)
                {
                    if(this->m_age==a.m_age)
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }
};

class Sql : public QWidget//数据库的函数
{
    Q_OBJECT
public:
    explicit Sql(QWidget *parent = 0);

signals:

public slots:


public:
    void Init(QSqlDatabase &db);//初始化函数, 主要是 实例化对象 建立数据库, 第二个,
    bool addSql(People a,QSqlDatabase &db);//插入数据
    bool deleteSql(People a,QSqlDatabase &db);//删除数据
    bool checkSql(People a,QSqlDatabase &db);//检测是否含有这个数据
    People querySql(QString value,QSqlDatabase &db);//根据账号  返回查询的数据
    void printSql(QSqlDatabase &db);//打印所有的数据

private:


};

#endif // SQL_H

16.start_home.h  智能家具模块

#ifndef START_HOME_H
#define START_HOME_H

#include 
/******** 音频相关类 *********/
#include  //音频属性类
#include  //音频参数
#include   //音频输入
#include  //音频输出
/******** 文件相关类 **********/
#include 
/******** 文字转语音类 ********/
#include 
#include

/******* 网络相关类 ****/
#include  /** 网络访问类 ***/
#include  /** 网络数据结果类 ***/

/******* QJSON 相关类 *****/
#include 
#include 
#include 

#include  /*** 消息对话框 ***/
#include  /*** 颜色对话框 ***/

#include 

namespace Ui {
class start_home;
}

class start_home : public QMainWindow
{
    Q_OBJECT

public:
    explicit start_home(QWidget *parent = nullptr);
    ~start_home();


signals://信号
    void home_hide4();//当前界面隐藏,主界面显示信号
    void enter_audio4();//进入语音识别
    void enter_luck_draw4();//进入快乐一天
    void enter_music4();//进入音乐播放
    //void enter_home();//进入智能家具
    void enter_tcp4();//进入远程监控
    void enter_weather4();//进入天气预报

private slots:
    //灯的开关按钮
    void on_pushButton_living_room_clicked();
    void on_pushButton_master_bedroom_clicked();
    void on_pushButton_secondary_bedroom_clicked();
    void on_pushButton_kitchen_clicked();
    void on_pushButton_wc_clicked();
    void on_pushButton_corridor_clicked();
    void on_pushButton_balcony_clicked();
    void slot_surface_show();//界面显示槽函数函数

    //语音
//    void slot_pushButton_input();
//    void slot_pushButton_output();

    void on_pushButton_yuyin_clicked();

    void on_pushButton_tianqi_clicked();

    void on_pushButton_jiankong_clicked();

    void on_pushButton_yinyue_clicked();

    void on_pushButton_kuaile_clicked();

    void on_pushButton_surface_clicked();

private:
    Ui::start_home *ui;
     QTcpSocket * TcpSocket;//套接字
     bool lianjie;

public slots:

    void slot_TcpSocket_readyRead();//读取函数
    void send_number(int a);//发送信号
    void receive_number(int a);//接收信号做出反应
    void slot_connected();//连接成功
     void slot_lianjie();




};

#endif // START_HOME_H

17.tcp_image.h  远程监控模块

#ifndef TCP_IMAGE_H
#define TCP_IMAGE_H

#include 
#include 

#include 
#include 
#include 

#include 
#include 
#include 
#include 
namespace Ui {
class TCP_image;
}

class TCP_image : public QWidget
{
    Q_OBJECT

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



signals://信号
    void TCP_hide5();//当前界面隐藏,主界面显示信号
    void enter_audio5();//进入语音识别
    void enter_luck_draw5();//进入快乐一天
    void enter_music5();//进入音乐播放
    void enter_home5();//进入智能家具
    //void enter_tcp();//进入远程监控
    void enter_weather5();//进入天气预报

public slots:
    void slot_TcpSocket_readyRead();

public:
    void analysis_Json(QByteArray data);//解析JSON
    void analysis_int(QJsonObject obj);
    void analysis_image(QJsonObject obj);
    void analysis_Qstring(QJsonObject obj);

private slots:
    void on_pushButton_clicked();
    void on_pushButton_3_clicked();
    void slot_surface_show();//界面显示槽函数函数
    void on_pushButton_yuyin_clicked();

    void on_pushButton_jiaju_clicked();

    void on_pushButton_tianqi_clicked();

    void on_pushButton_yinyue_clicked();

    void on_pushButton_kuaile_clicked();

    void on_pushButton_surface_clicked();

private:
    Ui::TCP_image *ui;
    QTcpSocket *TcpSocket;
    bool TCP_state;//TCP 连接的状态
    bool display_state;//视屏播放的状态
};

#endif // TCP_IMAGE_H

18.weather_forecast.h  天气预报模块

#ifndef WEATHER_FORECAST_H
#define WEATHER_FORECAST_H

#include 

#include 
#include  //将所有的网络头文件 直接加入
#include 

#include 
#include 
#include 
#include 
#include //时间类
#include //定时器
#include 
namespace Ui {
class weather_forecast;
}

class weather_forecast : public QWidget
{
    Q_OBJECT

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


signals://信号
    void weather_hide6();//当前界面隐藏,主界面显示信号
    void enter_audio6();//进入语音识别
    void enter_luck_draw6();//进入快乐一天
    void enter_music6();//进入音乐播放
    void enter_home6();//进入智能家具
    void enter_tcp6();//进入远程监控

private:
    Ui::weather_forecast *ui;
    QNetworkAccessManager * http;
    QTimer timer;//定时器
public:
    void set_label_1(int value);//设置图片
    void set_label_2(int value);//设置图片
    void set_label_3(int value);//设置图片
    void get_forecast(QNetworkReply * reply);//获取今天的天气预报
    void get_forecast_three(QNetworkReply * reply);//获取三天的天气预报

public slots:
    void set_hour_min();//设置现在的时间
    void setHide();//设置这个界面隐藏
    void setShow();//设置这个界面显示
    void slot_surface_show();//界面显示槽函数函数


private slots:
    void on_pushButton_yuyin_clicked();
    void on_pushButton_jiaju_clicked();
    void on_pushButton_jiankong_clicked();
    void on_pushButton_yinyue_clicked();
    void on_pushButton_kuaile_clicked();
    void on_pushButton_surface_clicked();
};

#endif // WEATHER_FORECAST_H

19. widget .h  主界面类

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include //数据库
#include //数据库执行类
#include //数据库错误信息
#include  //输出头文件

#include "audio.h"//小刘同学
#include "luck_draw.h"//快乐一天
#include "misic_display.h"//音乐播放
#include "weather_forecast.h"//天气预报
#include "start_home.h"//家具控制
#include "tcp_image.h"//远程监控
#include "mainsence.h"//游戏的头文件
#include "mainwindow.h"//游戏 2048 文件

#include 
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_pushButton_3_clicked();//开心一天

    void on_pushButton_clicked();//天气预报

    void on_pushButton_2_clicked();//音乐播放

    void on_pushButton_4_clicked();//监控

    void on_pushButton_5_clicked();//家具控制

    void on_pushButton_6_clicked();//小刘同学

    void slot_widge_show();//主界面显示函数

    void on_pushButton_7_clicked();

    void on_pushButton_2048_clicked();

private:
    Ui::Widget *ui;
    Audio * audio;//语音识别的对象
    luck_draw * luck;//幸运转盘
    Misic_display *music;//音乐播放器
    weather_forecast * weather;//天气预报
    start_home * home;//家具控制
    TCP_image * tcp;//远程监控
    Mainsence *www;//游戏
    MainWindow * kkk;//2048 游戏

    int kkkk=0;

};

#endif // WIDGET_H




.cpp 文件 代码

1. auidio .cpp  语音识别 模块

#include "audio.h"
#include "ui_audio.h"
#include 
Audio::Audio(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Audio)
{
    ui->setupUi(this);

    /******* 获取系统可用的音频设备 ********/
    QList AudioDevice_Outputs = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
    for(int i = 0; i < AudioDevice_Outputs.size() ; i++)
    {
        QString name = AudioDevice_Outputs[i].deviceName();
        ui->comboBox_audio_ouput->addItem(name);
    }

    QList AudioDevice_Inputs = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
    for(int i = 0; i < AudioDevice_Inputs.size() ; i++)
    {
        QString name = AudioDevice_Inputs[i].deviceName();
        ui->comboBox_audio_input->addItem(name);
    }


    /****** 配置音频参数 ******/
    QAudioFormat format;
    format.setSampleRate(16000);	//设置采样率:16000MHz
    format.setChannelCount(1);		//设置采集通道数:1通道
    format.setSampleSize(16);		//设置样本大小:16比特
    format.setCodec("audio/pcm");	//设置录音格式为:pcm格式

    QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice(); /** 使用默认输入 ***/
    if(info.isFormatSupported(format) == false)	//检测配置是否支持该音频设备
    {
        format = info.nearestFormat(format);	//只用最接近配置的音频配置
    }

    /****** 申请音频空间 *****/
    m_AudioInput = new QAudioInput(format,this);
    m_AudioOutput = new QAudioOutput(format,this);


    /****** 录音 ******/
    connect(ui->pushButton_input,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_input()));
    connect(ui->pushButton_output,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_output()));
    connect(m_AudioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(slot_AudioOutput(QAudio::State)));


    /***** 打印电脑的TTS语音引擎 *****/
    QStringList TextToSpeechs = QTextToSpeech::availableEngines();
    for(QString text : TextToSpeechs)
    {
        qDebug() << "语音引擎:" << text << endl;
    }
    qDebug()<<"没有";
    m_speech = new QTextToSpeech(this);
    qDebug()<<"1111";
    connect(ui->pushButton_transition,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_transition()));

    /****** HTTP网络访问类初始化 *****/
    m_http = new QNetworkAccessManager(this);
    m_music = new QNetworkAccessManager(this);//文本转音乐实列化对象
    media_player = new QMediaPlayer(this);//mp3播放

    connect(m_music,SIGNAL(finished(QNetworkReply*)),this,SLOT(slot_music_finished(QNetworkReply*)));
    connect(m_http,SIGNAL(finished(QNetworkReply*)),this,SLOT(slot_http_finished(QNetworkReply*)));
    QString url("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%1&client_secret=%2&");
    url = url.arg(API_Key,Secret_Key);

    m_http->get(QNetworkRequest(QUrl(url))); //获取 access_token
    connect(ui->pushButton_discern,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_discern()));
}


void Audio::slot_surface_show()//界面显示槽函数函数
{
    this->show();//当前界面显示
}



void Audio::slot_music_finished(QNetworkReply* Reply)
{

}



void Audio::slot_pushButton_discern()
{
    /***** 读取音频文件 *****/
    m_file = new QFile("./录音.wav");
    m_file->open(QIODevice::ReadWrite);
    if(m_file->isOpen() == false){ //打开失败
        delete m_file;
        return ;
    }

    QByteArray requestData = m_file->readAll(); //读取文件所有内容
    m_file->close();;;;;
    QString buf = requestData.toBase64(); //转码 BASE 64
    /****** 组装网址 **************/
    QUrl url("http://vop.baidu.com/server_api");
    /****** 组装JSON *************/
    QJsonObject json;
    json["format"] = "pcm";
    json["rate"] = 16000;
    json["dev_pid"] = 1537;
    json["channel"] = 1;
    json["token"] = access_token;
    json["cuid"] = "q12993";
    json["len"] = requestData.size(); //语音文字真是的byte长度
    json["speech"] = buf;

    /****** 设置头部 **********/
    QNetworkRequest Request(url);
    Request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");

    QByteArray send_json = QJsonDocument(json).toJson();
    m_http->post(Request,send_json);
}

void Audio::slot_pushButton_transition()
{
  QString text=ui->lineEdit_Text->text();
  QByteArray url="http://tsn.baidu.com/text2audio?";
      url.append(QString("&lan=zh&cuid= MAC  物理地址,自己的  &ctp=1&tok="));
      url.append(QUrl::toPercentEncoding(access_token));//这个后面还可以加别的参数 声音, 列表里面的东西
      url.append("&tex=");
      url.append(QUrl::toPercentEncoding(text));
      qDebug()<setMedia(QUrl::fromLocalFile(url));
      media_player->play();
}

 void Audio::audio_display(QString a)//文字播放
 {
     QByteArray url="http://tsn.baidu.com/text2audio?";
         url.append(QString("&lan=zh&cuid= MAC  物理地址,自己的  &ctp=1&tok="));
         url.append(QUrl::toPercentEncoding(access_token));//这个后面还可以加别的参数 声音, 列表里面的东西
         url.append("&tex=");
         url.append(QUrl::toPercentEncoding(a));
         qDebug()<setMedia(QUrl::fromLocalFile(url));
         media_player->play();

 }

 void Audio::bofang_liu()
 {
     QString name = QString("主人请尽情的吩咐小刘,让小刘看到主人的心,小刘一直深爱着主人,来和小刘一起玩耍吧! 主人。。。。我要被玩坏了。");
      audio_display(name);
 }

  void Audio::Event_judgment(QString result)//事件判断
  {
      /***** 判断结果 *****/
      if(result.contains("打开") == true)
      {
          if(result.contains("客厅灯") == true)
          {
              audio_display("客厅灯已打开");
              emit control_home(1);
          }
          else if(result.contains("主卧灯") == true)
          {

              audio_display("主卧灯已打开");
              emit control_home(3);
          }
          else if(result.contains("次卧灯") == true)
          {
              audio_display("次卧灯已打开");
              emit control_home(5);
          }
          else if(result.contains("厨房灯") == true)
          {
              audio_display("厨房灯已打开");
              emit control_home(7);
          }
          else if(result.contains("厕所灯") == true)
          {

              audio_display("厕所灯已打开");
              emit control_home(9);
          }
          else if(result.contains("走廊灯") == true)
          {
              audio_display("走廊灯已打开");
              emit control_home(11);
          }
          else if(result.contains("阳台灯") == true)
          {
              audio_display("阳台灯已打开");
              emit control_home(13);
          }

      }
      else if(result.contains("关闭") == true)
      {
          if(result.contains("客厅灯") == true)
          {
              audio_display("客厅灯已关闭");
              emit control_home(2);
          }
          else if(result.contains("主卧灯") == true)
          {
              audio_display("主卧灯已关闭");
              emit control_home(4);
          }
          else if(result.contains("次卧灯") == true)
          {
              audio_display("次卧灯已关闭");
              emit control_home(6);
          }
          else if(result.contains("厨房灯") == true)
          {
              audio_display("厨房灯已关闭");
              emit control_home(8);
          }
          else if(result.contains("厕所灯") == true)
          {

              audio_display("厕所灯已关闭");
              emit control_home(10);
          }
          else if(result.contains("走廊灯") == true)
          {
              audio_display("走廊灯已关闭");
              emit control_home(12);
          }
          else if(result.contains("阳台灯") == true)
          {
              audio_display("阳台灯已关闭");
              emit control_home(14);
          }
      }
      else if(result.contains("播放音乐")== true|| result.contains("打开音乐")== true)
      {

          audio_display("音乐已经打开");
          emit control_music_open();
      }
      else if(result.contains("停止播放")== true || result.contains("关闭音乐")== true)
      {

          emit control_music_close();
          audio_display("音乐已经停止播放");
      }
      else if(result.contains("上一首")== true)
      {
            emit control_music_close();
            audio_display("上一首已经播放");
            emit control_shangyishou();
      }
      else if(result.contains("下一首")== true)
      {
          emit control_music_close();
          audio_display("下一首已经播放");
          emit control_xiayishou();
      }


  }


void Audio::slot_http_finished(QNetworkReply *Reply)
{
    // 响应的状态码为 200 , 表示请求成功
    int stat = Reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

    QByteArray Reply_data = Reply->readAll();
    qDebug() << "Reply_data = " << Reply_data << endl;
    ui->textEdit_JSON->setText(QJsonDocument::fromJson(Reply_data).toJson()); //将其转为JSON字符串
    if(stat == 200) /*** 成功数据 ***/
    {
        //获取响应信息
        QByteArray byteArray = QString(Reply_data).toUtf8();
        QJsonDocument JsonDocument = QJsonDocument::fromJson(byteArray); //转为JSON格式字符串
        if(JsonDocument.isObject() == true)
        {
            QJsonObject JsonObject = JsonDocument.object();
            if(JsonObject.find("access_token") != JsonObject.end())
            {
                access_token = JsonObject["access_token"].toString();
                qDebug() << "access_token:" << access_token << endl;
            }

            if(JsonObject.find("err_msg") != JsonObject.end() && JsonObject.find("result") != JsonObject.end())
            {
                QJsonArray JsonArray = JsonObject["result"].toArray();
                QString result = JsonArray[0].toString();
                ui->lineEdit_Json->setText(result);
                Event_judgment(result);
            }
        }
    }
}


Audio::~Audio()
{
    delete ui;
}

void Audio::slot_pushButton_input() /*** 录制音频 ***/
{
    if(ui->pushButton_input->text() == "开始录制")
    {
        m_file = new QFile("./录音.wav");
        m_file->open(QIODevice::ReadWrite | QIODevice::Truncate);
        if(m_file->isOpen() == false){ //打开失败
            delete m_file;
            return ;
        }
        m_AudioInput->start(m_file);

        ui->pushButton_input->setText("停止录制");
    }
    else if(ui->pushButton_input->text() == "停止录制")
    {
        m_AudioInput->stop();//关闭录制
        m_file->close(); //关闭文件
        ui->pushButton_input->setText("开始录制");
    }
}

void Audio::slot_pushButton_output()
{
    m_file = new QFile("./录音.wav");
    m_file->open(QIODevice::ReadWrite);
    if(m_file->isOpen() == false){ //打开失败
        delete m_file;
        return ;
    }

    m_AudioOutput->start(m_file);
}

void Audio::slot_AudioOutput(QAudio::State state)
{
    if(state == QAudio::IdleState)
    {
        m_AudioOutput->stop();
        delete m_file;
    }
}




void Audio::on_pushButton_tianqi_clicked()
{
    this->hide();
    emit enter_weather1();//进入天气预报

}

void Audio::on_pushButton_jiaju_clicked()
{
    this->hide();
    emit enter_home1();//进入智能家具
}

void Audio::on_pushButton__clicked()
{
    this->hide();
    emit enter_tcp1();//进入远程监控
}

void Audio::on_pushButton_yinyue_clicked()
{
    this->hide();
    emit  enter_music1();//进入音乐播放
}

void Audio::on_pushButton_kuaile_clicked()
{
    this->hide();
    emit enter_luck_draw1();//进入快乐一天
}

void Audio::on_pushButton_surface_clicked()
{
    this->hide();
    emit audio_hide1();//当前界面隐藏,主界面显示信号
}

2. camera.cpp  人脸识别登录模块

#include "camera.h"
#include "ui_camera.h"
#include 
#include 
Camera::Camera(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Camera)
{
    ui->setupUi(this);
    /****  获取系统可用摄像头列表 ****/
    QList cameras = QCameraInfo::availableCameras();//获取可用摄像头设备列表
    int index = cameras.size();
    for(int i=0;icomboBox->addItem(cameras.at(i).description()); //将摄像头添加到UI界面摄像头列表中
        }
    }


    connect(ui->pushButton_camrae_open,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_camrae_open()));
    connect(ui->pushButton_capture,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_capture()));

    /****** HTTP网络访问类初始化 *****/
    m_http = new QNetworkAccessManager(this);

    connect(m_http,SIGNAL(finished(QNetworkReply*)),this,SLOT(slot_http_finished(QNetworkReply*)));
    QString url("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%1&client_secret=%2&");
    url = url.arg(API_Key,Secret_Key);

    m_http->get(QNetworkRequest(QUrl(url)));
    /****** 按钮发送 http 的 post 请求 ******/
    connect(ui->pushButton_regiset,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_regiset()));
    connect(ui->pushButton_find,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_find()));
    connect(this,SIGNAL(camera_open()),this,SLOT(slot_pushButton_camrae_open()));
}

void Camera::slot_pushButton_find()//百度云寻找 人脸
{
    /**** 获取用户输入的信息 *****/
    QString group = ui->comboBox_group->currentText();
    QString ID = ui->lineEdit_ID->text();
    QString name = ui->lineEdit_user_info->text();
    if(pixmap_init==0)
    {
         QMessageBox::warning(this,"错误警告","没有拍照,无法查询","确认");
         return;
    }

    /***** 组装http访问百度 *****/
    QString baidu = "https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=%1";
    QString url = baidu.arg(access_token);
    /**** 图片转码为BASE64编码 ****/
    QImage Image = ui->label_pixmap->pixmap()->toImage(); //获取 QLabel 标签的图片
    QByteArray data; /*** 用于存储图片的二进制数据 ***/
    QBuffer buffer(&data); /*** 将 data 作为缓冲区对象 ****/
    Image.save(&buffer,"png"); /***将图片保存到 buf -> data 缓存区 为 png 格式 ***/
    QString buf = data.toBase64(); /** BASE64转码 **/
    /*** 组装JSON数据 ****/
    QJsonObject json;
    json["image"] = buf;
    json["image_type"] = "BASE64";
    json["group_id_list"] = "Student,Teather"; //多组使用逗号隔开
    /** 注意:人脸注册完毕后,生效时间一般为5s以内,之后便可以进行人脸搜索或认证操作 **/
    /**** HTTP 请求POST 百度 ****/
    QNetworkRequest Request(url);
    Request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");   //请求头 类型 JSON 格式
    QByteArray byte = QJsonDocument(json).toJson(QJsonDocument::Compact); //将JSON类内容转为字符串方便发送
    /**** 执行post请求 ****/
    m_http->post(Request,byte);
}
void Camera::slot_pushButton_regiset()//百度云 注册人脸
{
    /**** 获取用户输入的信息 *****/
    QString group = ui->comboBox_group->currentText();
    QString ID = ui->lineEdit_ID->text();
    QString name = ui->lineEdit_user_info->text();

    if(pixmap_init==0)
    {
         QMessageBox::warning(this,"错误警告","没有拍照,无法注册","确认");
         return;
    }

    if(group==""  ||  ID == ""  || name=="")
    {
        QMessageBox::warning(this,"错误警告","用户信息不准确,无法注册","确认");
        return;
    }

    /***** 组装http访问百度 *****/
    QString baidu = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=%1";
    QString url = baidu.arg(access_token);
    /**** 图片转码为BASE64编码 ****/
    QImage Image = ui->label_pixmap->pixmap()->toImage(); //获取 QLabel 标签的图片

    QByteArray data; /*** 用于存储图片的二进制数据 ***/

    QBuffer buffer(&data); /*** 将 data 作为缓冲区对象 ****/
    Image.save(&buffer,"png"); /***将图片保存到 buf -> data 缓存区 为 png 格式 ***/

    QString buf = data.toBase64(); /** BASE64转码 **/
    /*** 组装JSON数据 ****/
    QJsonObject json;

    json["image"] = buf;
    json["image_type"] = "BASE64";
    json["group_id"] = group;
    json["user_id"] = ID;
    json["user_info"] = name;

    /** 注意:人脸注册完毕后,生效时间一般为5s以内,之后便可以进行人脸搜索或认证操作 **/

    /**** HTTP 请求POST 百度 ****/
    QNetworkRequest Request(url);
    Request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");   //请求头 类型 JSON 格式

    QByteArray byte = QJsonDocument(json).toJson(QJsonDocument::Compact); //将JSON类内容转为字符串方便发送
    /**** 执行post请求 ****/
    m_http->post(Request,byte);
    QMessageBox::information(this,"提示信息","注册成功!!, 登录请点击登录按钮",QMessageBox::Yes);
}
void Camera::slot_http_finished(QNetworkReply *Reply)//百度开始请求 access_token  成功后打开摄像头
{
    // 响应的状态码为 200 , 表示请求成功
    int stat = Reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    QByteArray Reply_data = Reply->readAll();
    qDebug() << "Reply_data = " << Reply_data << endl;

    if(stat == 200) /*** 成功数据 ***/
    {
        //获取响应信息
        QByteArray byteArray = QString(Reply_data).toUtf8();
        QJsonDocument JsonDocument = QJsonDocument::fromJson(byteArray); //转为JSON格式字符串
        qDebug() <<" json : "<90)
                {
                    QMessageBox::information(this,"提示信息","登陆成功",QMessageBox::Yes);
                    ddd= new Widget;
                    this->close();//关闭此窗口
                    ddd->show();
                }
                else
                {
                    QMessageBox::information(this,"提示信息","登陆失败,没有此人",QMessageBox::Yes);
                }
            }
        }
        if(JsonDocument.isObject() == true)
        {
            QJsonObject JsonObject = JsonDocument.object();
            if(JsonObject.find("access_token") != JsonObject.end())
            {
                access_token = JsonObject["access_token"].toString();
                qDebug() << "access_token:" << access_token <pushButton_camrae_open->text() == "打开摄像头")
    {
        /**** 摄像头初始化 ****/
        QCameraInfo camreinfo = QCameraInfo::defaultCamera(); /*** 获取系统默认摄像头 ***/
        if(camreinfo.isNull() == true)
        {
            QMessageBox::warning(this,"警告","系统没有可用摄像头");
            return ;
        }
        /**** 申请摄像头类空间 ****/
        m_Camera = new QCamera(camreinfo); // 直接使用系统默认的
        m_Camera->setCaptureMode(QCamera::CaptureStillImage);				//设置捕捉模式为静态帧(图片形式)
        m_Camera->setCaptureMode(QCamera::CaptureMode::CaptureViewfinder);	//将采集到取景器中
        m_Camera->setViewfinder(ui->VideoWidget); //将摄像头数据输出到 UI 界面显示
        m_Camera->start(); //摄像头打开

        ui->pushButton_camrae_open->setText("关闭摄像头");
        ui->pushButton_capture->setEnabled(true);

        /***** 将摄像头放入摄像头记录类中,方便拍照 ******/
        CameraImageCapture = new QCameraImageCapture(m_Camera);
        CameraImageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
        /*********** 捕获信号函数 imageCaptured(int,QImage) 拍了一张照,发出该信号 ********/
        connect(CameraImageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(slot_CameraImageCapture(int,QImage)));
    }
    else
    {
        delete m_Camera; //释放他的空间
        delete CameraImageCapture; //释放他的空间

        ui->pushButton_camrae_open->setText("打开摄像头");
        ui->pushButton_capture->setEnabled(false);
    }
}
void Camera::slot_CameraImageCapture(int id, QImage image)
{
    pixmap_init=1;//摄像头拍照成功
    ui->label_pixmap->setPixmap(QPixmap::fromImage(image));
}
void Camera::slot_pushButton_capture()
{
    CameraImageCapture->capture("D:\\QT\\hqyj_coding\\Last_project\\gg.jpg");
}


3. chooselevelscene.cpp   翻金币游戏的 

#include "chooselevelscene.h"
#include 
#include 
#include 
#include "mypushbutton.h"
#include 
#include 
#include 
#include 

ChooseLevelScene::ChooseLevelScene(QWidget *parent) : QMainWindow(parent)
{
    //配置选择关卡场景
    this->setFixedSize(320,588);
    //设置图标
    this->setWindowIcon(QPixmap(":/res/Coin0001.png"));

    //设置标题
    this->setWindowTitle("选择关卡场景");

    //创建菜单栏
    QMenuBar * bar = menuBar();
    setMenuBar(bar);

    //创建开始菜单
    QMenu * startMenu = bar->addMenu("开始");

    //创建退出  菜单栏
    QAction * quitAction = startMenu->addAction("退出");

    //点击退出 实现退出游戏 建立连接
    connect(quitAction,&QAction::triggered,[=](){
        this->close();

    });

    //选择关卡的音效
    QSound * chooseSound = new QSound(":/res/TapButtonSound.wav",this);
    //返回按钮的音效
    QSound * backSound = new QSound(":/res/TapButtonSound.wav",this);



    //返回按钮
    mypushbutton * backBtn = new mypushbutton(":/res/BackButton.png", ":/res/BackButtonSelected.png");//这两个图片有细微的差别,这样构成了一个动态的感觉
    backBtn->setParent(this);
    backBtn->move(this->width() - backBtn->width(),this->height() - backBtn->height());

    //点击返回
    connect(backBtn,&mypushbutton::clicked,[=](){
        //点击了返回按钮的音效
        backSound->play();

       qDebug()<<"点击了选择关卡的 返回按键";

       //告诉主场景,我返回了,主场景监听 chooseLeveScene 的返回按键

       //延时发送信号

       QTimer::singleShot(500,this,[=](){
           emit this->chooseSceneBack();//激发信号  返回开始界面

       });

    });

    //创建选择关卡的按钮
    for(int i=0;i<20;i++)
    {
        mypushbutton * menuBtn = new mypushbutton(":/res/LevelIcon.png");
        menuBtn->setParent(this);//设置父亲,方便关闭和销毁
        menuBtn->move(25 + i%4 *70 ,130 + i/4 *70);//设置关卡的图片的位置

        //监听每个按钮的点击事件  建立信号的连接
        connect(menuBtn,&mypushbutton::clicked,[=](){

            //选择关卡之后播放音效
            chooseSound->play();

           QString str  =QString("你选择的是第 %1 关").arg(i+1);
            qDebug()<hide();//进入游戏关卡 ,隐藏游戏选择界面
            paly =new PlayScene(i+1);//创建一个游戏的界面

            //设置游戏场景出现的初始位置
            paly->setGeometry(this->geometry());

            paly->show();//显示游戏界面


            //退出游戏的信号连接
            connect(paly,&PlayScene::chooseSceneBack,[=](){
                this->setGeometry(paly->geometry());//窗口的位置的调整
                this->show();
                delete paly;
                paly=NULL;
            });

        });

        //设置选择关卡上的数字
        QLabel *label = new QLabel; //建立一个标签的对象
        label->setParent(this);//设置父亲, 方便关闭
        label->setFixedSize(menuBtn->width(),menuBtn->height());//设置标签的大小
        label->setText(QString::number(i+1));//标签里设置数字
        label->move(25 + i%4 *70 ,130+ i/4*70);//设置标签的位置

        //设置标签 label 上的文字对齐方式  水平居中  和 垂直居中
        label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

        //设置让鼠标进行穿透  51号属性

        label->setAttribute((Qt::WA_TransparentForMouseEvents));


    }


}
void ChooseLevelScene::paintEvent(QPaintEvent *)
{
    //加载背景
   QPainter painter(this);
   QPixmap pix;//建立对象
   pix.load(":/res/OtherSceneBg.png");//加载背景
   painter.drawPixmap(0,0,this->width(),this->height(),pix);//加载第一张的图片

    //加载标题
   pix.load(":/res/Title.png");
   painter.drawPixmap((this->width() - pix.width())*0.5,30,pix.width(),pix.height(),pix);//加载下一张图片进去
}

4. dataconfig.cpp    翻金币游戏的 关卡 的数据 

//dataconfig.cpp
#include "dataconfig.h"
#include 
dataconfig::dataconfig(QObject *parent) : QObject(parent)//构造函数
{
    //二维数组
  int array1[4][4] = {{1, 1, 1, 1},
                 {1, 1, 0, 1},
                 {1, 0, 0, 0},
                 {1, 1, 0, 1} } ;

QVector< QVector> v;  //一个动态数组的 二维数组
for(int i = 0 ; i < 4;i++)
{
  QVectorv1;//一个一维数组的动态数组
  for(int j = 0 ; j < 4;j++)
  {

     v1.push_back(array1[i][j]);//把数据写入到动态数组
  }
  v.push_back(v1);//把一维数组计入到二维数组
}

mData.insert(1,v);//把二维数组 计入到之前的 map  地图中  key =1  value = v


int array2[4][4] = { {1, 0, 1, 1},
                   {0, 0, 1, 1},
                   {1, 1, 0, 0},
                   {1, 1, 0, 1}} ;

v.clear();//清除二维数组。
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array2[i][j]);
   }
   v.push_back(v1);
}

mData.insert(2,v);



int array3[4][4] = {  {0, 0, 0, 0},
                    {0, 1, 1, 0},
                    {0, 1, 1, 0},
                    {0, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array3[i][j]);
   }
   v.push_back(v1);
}

mData.insert(3,v);


int array4[4][4] = {   {0, 1, 1, 1},
                     {1, 0, 0, 1},
                     {1, 0, 1, 1},
                     {1, 1, 1, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array4[i][j]);
   }
   v.push_back(v1);
}

mData.insert(4,v);


int array5[4][4] = {  {1, 0, 0, 1},
                    {0, 0, 0, 0},
                    {0, 0, 0, 0},
                    {1, 0, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array5[i][j]);
   }
   v.push_back(v1);
}

mData.insert(5,v);


int array6[4][4] = {   {1, 0, 0, 1},
                     {0, 1, 1, 0},
                     {0, 1, 1, 0},
                     {1, 0, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array6[i][j]);
   }
   v.push_back(v1);
}

mData.insert(6,v);


int array7[4][4] = {   {0, 1, 1, 1},
                     {1, 0, 1, 1},
                     {1, 1, 0, 1},
                     {1, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array7[i][j]);
   }
   v.push_back(v1);
}

mData.insert(7,v);

int array8[4][4] = {  {0, 1, 0, 1},
                    {1, 0, 0, 0},
                    {0, 0, 0, 1},
                    {1, 0, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array8[i][j]);
   }
   v.push_back(v1);
}

mData.insert(8,v);

int array9[4][4] = {   {1, 0, 1, 0},
                     {1, 0, 1, 0},
                     {0, 0, 1, 0},
                     {1, 0, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array9[i][j]);
   }
   v.push_back(v1);
}

mData.insert(9,v);



int array10[4][4] = {  {1, 0, 1, 1},
                     {1, 1, 0, 0},
                     {0, 0, 1, 1},
                     {1, 1, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array10[i][j]);
   }
   v.push_back(v1);
}

mData.insert(10,v);


int array11[4][4] = {  {0, 1, 1, 0},
                     {1, 0, 0, 1},
                     {1, 0, 0, 1},
                     {0, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array11[i][j]);
   }
   v.push_back(v1);
}

mData.insert(11,v);

int array12[4][4] = {  {0, 1, 1, 0},
                     {0, 0, 0, 0},
                     {1, 1, 1, 1},
                     {0, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array12[i][j]);
   }
   v.push_back(v1);
}

mData.insert(12,v);


int array13[4][4] = {    {0, 1, 1, 0},
                       {0, 0, 0, 0},
                       {0, 0, 0, 0},
                       {0, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array13[i][j]);
   }
   v.push_back(v1);
}

mData.insert(13,v);

int array14[4][4] = {    {1, 0, 1, 1},
                       {0, 1, 0, 1},
                       {1, 0, 1, 0},
                       {1, 1, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array14[i][j]);
   }
   v.push_back(v1);
}

mData.insert(14,v);


int array15[4][4] = {   {0, 1, 0, 1},
                      {1, 0, 0, 0},
                      {1, 0, 0, 0},
                      {0, 1, 0, 1}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array15[i][j]);
   }
   v.push_back(v1);
}

mData.insert(15,v);


int array16[4][4] = {   {0, 1, 1, 0},
                      {1, 1, 1, 1},
                      {1, 1, 1, 1},
                      {0, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array16[i][j]);
   }
   v.push_back(v1);
}

mData.insert(16,v);

int array17[4][4] = {  {0, 1, 1, 1},
                     {0, 1, 0, 0},
                     {0, 0, 1, 0},
                     {1, 1, 1, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array17[i][j]);
   }
   v.push_back(v1);
}

mData.insert(17,v);


int array18[4][4] = { {0, 0, 0, 1},
                    {0, 0, 1, 0},
                    {0, 1, 0, 0},
                    {1, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array18[i][j]);
   }
   v.push_back(v1);
}

mData.insert(18,v);

int array19[4][4] = {   {0, 1, 0, 0},
                      {0, 1, 1, 0},
                      {0, 0, 1, 1},
                      {0, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array19[i][j]);
   }
   v.push_back(v1);
}

mData.insert(19,v);

int array20[4][4] = {  {0, 0, 0, 0},
                     {0, 0, 0, 0},
                     {0, 0, 0, 0},
                     {0, 0, 0, 0}} ;
v.clear();
for(int i = 0 ; i < 4;i++)
{
   QVectorv1;
   for(int j = 0 ; j < 4;j++)
   {
      v1.push_back(array20[i][j]);
   }
   v.push_back(v1);
}

mData.insert(20,v);
}

5.entry_mode.cpp    登录方式的界面类

#include "entry_mode.h"
#include "ui_entry_mode.h"

Entry_mode::Entry_mode(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Entry_mode)
{
    ui->setupUi(this);
}

Entry_mode::~Entry_mode()
{
    delete ui;
}

void Entry_mode::on_pushButton_clicked()
{
    a1=new Camera;
    this->hide();
    a1->show();
}

void Entry_mode::on_pushButton_2_clicked()
{
    a2=new Sign_in;
    this->hide();
    a2->show();
}

6.luck_draw.cpp     开心一天的界面类

#include "luck_draw.h"
#include "ui_luck_draw.h"

luck_draw::luck_draw(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::luck_draw)
{
    ui->setupUi(this);
   // ui->setupUi(this);


    //this->resize(600,560);// 定义  widget 的大小  宽度   高度
    this->setMouseTracking(true);//设置鼠标焦点使能
    m_nRotationAngle = 0;
    m_i = 0;
    m_T = 0;
    isDefault = false;
    m_btn = new QPushButton(this); //生成一个按钮
    m_btn->move(280,560);//按钮的位置移动到  坐标  273  450
    m_labTr = new QLabel(tr("抽奖结果:"),this);//生成一个标签, tr() 是一个封装的函数,主要用于要进行多语言的切换的时候
    m_labTr->move(220,200);//标签的位置 移动到 坐标 233 105
    m_ldeRe = new QLineEdit(tr("未开始抽奖"),this);//生成一个 LineEdit 的控件 ,
    m_ldeRe->move(290,195);//LineEdit 的控件 移动到  坐标 293 103
    m_ldeRe->setEnabled(false);//关闭使能,主要是为了 不让我们在这个控件上面编辑
    m_ldeRe->setAlignment(Qt::AlignCenter);//两个维度的中心 (字体处于)
    m_btn->setText(tr("启动"));//把按键 的名字设置为 启动
    m_timer = new QTimer(this);//实列化对象  定时器

    //setStyleSheet  只是补充的连接:  https://blog.csdn.net/qq_42250189/article/details/105199339
    //QT ccs  颜色对照表 连接:https://www.cnblogs.com/edgarli/p/16293461.html
    setStyleSheet("QLabel{"   //对所有的标签操作
                  "font-size:15px;"//字体大小 为 15
                  ""
                  "}"
                  "QLineEdit{"  //对LineEdit 操作
                  "color:white;"//字体颜色为 白色
                  "font-size:14px;"//字体大小 为 14
                  "background-color:#f57ab8;" //背景颜色 粉红色
                  "border:1px solid gray;"//边框宽度 为1  以及颜色为灰色
                  "border-radius:5px;"//边框弧度 为 5
                  "}"
                  "#QPushButton{"//对 按钮 进行操作
                  "width:40px;" //宽 36
                  "height:20px;"//高 16
                  "text-align:center;"//字体位居 中心
                  "background-color:#da0000;"//背景颜色 红色
                  "color:white;"//字体颜色为白色
                  "border:1px solid gray;"//边框宽度 为1  以及颜色为灰色
                  "border-radius:3px;"//边框弧度 为 3
                  "}"
                  );
    connect(m_timer,SIGNAL(timeout()),this,SLOT(updatePaint()));//设置的定时器 结束信号 连接函数  updatePaint
    connect(m_btn,SIGNAL(clicked(bool)),this,SLOT(btnClicked()));//按钮的点击信号  连接函数  btnClicked
    connect(this,SIGNAL(sigResult(int)),this,SLOT(reResult(int)));


    ui->pushButton_jiaju->setEnabled(true);
    ui->pushButton_jiankong->setEnabled(true);
    ui->pushButton_surface->setEnabled(true);
    ui->pushButton_tianqi->setEnabled(true);
    ui->pushButton_yinyue->setEnabled(true);
    ui->pushButton_yuyin->setEnabled(true);
}

luck_draw::~luck_draw()
{
    delete ui;
}

void luck_draw::slot_surface_show()//界面显示槽函数函数
{
    this->show();//当前界面显示
}

void luck_draw::gradientArc(QPainter *painter, int radius, int startAngle,int angleLength, int arcHeight, QRgb color)//扇形的构造函数
{
    QRadialGradient gradient(0,0,radius);
    gradient.setColorAt(0,Qt::black);
    gradient.setColorAt(1.0,color);
    painter->setBrush(gradient);

    // << 1(左移1位)相当于radius*2 即:150*2=300
    //QRectF(-150, -150, 300, 300)
    QRectF rectf(-radius,-radius,radius << 1,radius << 1);
    QPainterPath path;
    path.arcTo(rectf,startAngle,angleLength);

    QPainterPath subPath;
    subPath.addEllipse(rectf.adjusted(arcHeight, arcHeight, -arcHeight, -arcHeight));
    //subPath.addEllipse(rect.adjusted(arcHeight,arcHeight,-arcHeight,-arcHeight));
    //path为扇形 subPath为椭圆
    path -= subPath;//

    //        QFont font;
    //        font.setFamily("Microsoft YaHei");
    //        font.setPointSize(14);
    //        painter->setPen(Qt::NoPen);
    //        path.addText(path.pointAtPercent(0.5), font, QStringLiteral("一去丶二三里"));
    painter->setPen(Qt::NoPen);
    painter->drawPath(path);
}

void luck_draw::updatePaint()//
{
    if(!isDefault)
    {
        m_nRotationAngle = m_nRotationAngle + 33;
        if(m_nRotationAngle >360)
        {
            m_nRotationAngle = 0;
            m_T++;
            if(m_T == 3)
            {
                m_nRotationAngle = m_nRotationAngle + 5;

            }else if(m_T == 5)
            {
                 stopInit();
            }
        }
    }
    else
    {
        m_nRotationAngle = m_nRotationAngle + 33;
        if(m_nRotationAngle >360)
        {
            m_nRotationAngle = 0;
            m_T++;
            if(m_T == 3)
            {
                m_nRotationAngle = m_nRotationAngle + 5;

            }else if(m_T == 5)
            {
                 stopInit();
            }
        }
    }
    update();
}

void luck_draw::btnClicked()
{
    //m_btn->setEnabled(false);//使能关闭
    if(!m_timer->isActive())//此时定时器没有活动
    {
        m_timer->start(30);//定时器定时 30 ms
        int iRangd = getRand();//获取奖项的 编码
        emit sigResult(iRangd);
        m_T = 0;
        m_ldeRe->setStyleSheet("color:white;");
        m_ldeRe->setText(tr("正在抽奖..."));

    }else
    {
        stopInit();
    }
}

void luck_draw::reResult(int re)
{
    isDefault = true;
    m_map =  returnResult(re);
    QMapIterator ii(m_map);
    if(m_map.isEmpty())
        return;
    while(ii.hasNext())
    {
        ii.next();
        m_Re = ii.value();
        m_nRo = ii.key();
    }
     m_btn->setEnabled(true);
}

void luck_draw::stopRotate()
{
    m_timer->stop();
}

QMap luck_draw::returnResult(int re)//设置指针的位置
{

    int ire = 0;
    QMap map;
    switch(re)
    {
    case 0:
        //(rand()%(b-a))+ a,-->[a,b)的随机数
        ire = (qrand() % (45 - 0) + 0);
        qDebug() << "二等奖";
        map.insert(ire,tr("二等奖"));
        break;
    case 1:
        qDebug() << "谢谢1";
        ire = (qrand() % (90 - 46) + 46);
        map.insert(ire,tr("谢谢参与"));
        break;
    case 2:
        qDebug() << "特等奖";
        ire = (qrand() % (135 - 90) + 90);
        map.insert(ire,tr("特等奖"));
        break;
    case 3:
        qDebug() << "三等奖";
        ire = (qrand() % (180 - 135) + 135);
        map.insert(ire,tr("三等奖"));
        break;
    case 4:
        qDebug() << "幸运2";
        ire = (qrand() % (225 - 180) + 180);
        map.insert(ire,tr("幸运奖"));
        break;
    case 5:
        qDebug() << "谢谢2";
        ire = (qrand() % (270 - 225) + 225);
        map.insert(ire,tr("谢谢参与"));
        break;
    case 6:
        qDebug() << "一等奖";
        ire = (qrand() % (315 - 270) + 270);
        map.insert(ire,tr("一等奖"));
        break;
    case 7:
        qDebug() << "幸运1";
        ire = (qrand() % (360 - 315) + 315);
        map.insert(ire,tr("幸运奖"));
        break;
    default:
        break;
    }

    return map;
}

QString luck_draw::showAwards(luck_draw::Awards award)
{
    QString result = "";
    switch(award)
    {
    case Spe:
        result = "特等奖";
        break;
    case First:
        result = "一等奖";
        break;
    case Second:
        result = "二等奖";
        break;
    case Third:
        result = "三等奖";
        break;
    case Luck_Fir:
        result = "幸运奖";
        break;
    case Luck_Sec:
        result = "幸运奖";
        break;
    case ThanK_Fir:
        result = "谢谢参与";
        break;
    case Thank_Sec:
        result = "谢谢参与";
        break;
    default:
        break;
    }

    return result;
}

void luck_draw::stopInit()//立即停止函数
{
    m_timer->stop();
    m_T = 0;
    isDefault = false;
    int ip =  m_nRo;
    int tp = m_nRotationAngle;
    if(ip > m_nRotationAngle)
    {
        for (int i = tp; i <= ip; i++)
        {
            m_nRotationAngle = i;
        }
    }
    m_nRotationAngle = m_nRo;
    m_ldeRe->setText(m_Re);
    update();
}

//设置奖项概率
int luck_draw::getRand()
{
    int re = 10;//开始的时候没有奖项
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));//产生随机数种子(指从零点整到当前时间所经过的秒数)
    int rand = ((qrand() % 100) + 1);//把 rand  的范围 定义为 1 -100  qrand()//随机获取一个数字
    qDebug() << "rand:" << rand;
    //概率部分
    if(rand == 1)
    {
        re = 2;
    }else if((rand <= 4) && (rand >= 2 ))
    {
        re = 6;
    }else if((rand <= 9) && (rand >= 5 ))
    {
        re = 0;
    }else if((rand <= 20) && (rand >= 10 ))
    {
        re = 3;
    }else if((rand <= 35) && (rand >= 21 ))
    {
        re = 4;
    }else if((rand <= 50) && (rand >= 36 ))
    {
        re = 7;
    }else if((rand <= 75) && (rand >= 51 ))
    {
        re = 1;
    }else if((rand <= 100) && (rand >= 76 ))
    {
        re = 5;
    }
    return re;
}

void luck_draw::paintEvent(QPaintEvent *)
{
    QPainter painter(this);

    painter.drawPixmap(0,0,800,760,QPixmap(":/image/image/抽奖界面.jpeg"));
    //QLabel* m_lblbg= new QLabel(this);
    //m_lblbg->setPixmap(QPixmap(":/image/抽奖界面.jpeg"));
    //m_lblbg->setScaledContents(true);

    painter.setRenderHint(QPainter::Antialiasing,true);
    int radius = 150;
    int arcHeight = 130;//  外圈到里面的长度  (就是大的圆里面 有个的同心圆的半径 为 radius - arcHeight,小的圆没有填充 )

    //>>1 右移一位,相当于width() / 2
    painter.translate((width() >> 1)-100,height() >> 1);//圆心的位置  QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用

    //    painter.rotate(m_nRotationAngle);

    /*
         * 参数二:半径
         * 参数三:开始的角度
         * 参数四:指扫取的角度-顺时针(360度 / 8 = 45度)
         * 参数五:圆环的高度
         * 参数六:填充色
        **/
    gradientArc(&painter,radius,0,45,arcHeight,qRgb(200,200,0));
    gradientArc(&painter,radius,45,45,arcHeight,qRgb(200,0,200));
    gradientArc(&painter,radius,90,45,arcHeight,qRgb(0,200,200));
    gradientArc(&painter,radius,135,45,arcHeight,qRgb(200,0,0));
    gradientArc(&painter,radius,225,45,arcHeight,qRgb(0,200,0));
    gradientArc(&painter,radius,180,45,arcHeight,qRgb(0,0,200));
    gradientArc(&painter,radius,270,45,arcHeight,qRgb(0,0,0));
    gradientArc(&painter,radius,315,45,arcHeight,qRgb(150,150,150));

    //setPen,第一个参数是画笔颜色,这里设置为黑色;第二个参数是画笔的粗细,这里是2px;
    painter.setPen(QPen(QColor(Qt::yellow),2));
    painter.rotate(-35);//图形的旋转等操作,参数为顺时针旋转的角度,以原点为中心旋转
    painter.drawText(60,30,tr("谢谢参与"));

    painter.rotate(40);
    painter.drawText(70,30,tr("一等奖"));

    painter.rotate(95);
    painter.drawText(70,30,tr("二等奖"));

    painter.rotate(135);
    painter.drawText(70,30,tr("三等奖"));

    painter.rotate(180);
    painter.drawText(70,30,tr("幸运奖"));

    painter.rotate(210);
    painter.drawText(70,30,tr("幸运奖"));

    painter.rotate(245);
    painter.drawText(70,30,tr("谢谢参与"));

    painter.rotate(40);
    painter.drawText(70,30,tr("特等奖"));

    QPainter painter2(this);
    painter2.setRenderHint(QPainter::Antialiasing,true);
    painter2.translate((width() >> 1)-100,height() >> 1);
    painter2.rotate(m_nRotationAngle);
    static const QPoint poit[4] = {QPoint(0,-18),QPoint(10,0),QPoint(0,60),QPoint(-10,0)};
    painter2.setBrush(QColor(Qt::red));
    painter2.setPen(Qt::NoPen);
    painter2.drawPolygon(poit,4);

    painter2.setBrush(QColor(Qt::yellow));
    painter2.drawEllipse(-7,-7,14,14);


    ui->pushButton_jiaju->setEnabled(true);
    ui->pushButton_jiankong->setEnabled(true);
    ui->pushButton_surface->setEnabled(true);
    ui->pushButton_tianqi->setEnabled(true);
    ui->pushButton_yinyue->setEnabled(true);
    ui->pushButton_yuyin->setEnabled(true);
}


void luck_draw::on_pushButton_tianqi_clicked()
{
    this->hide();//隐藏
    emit enter_weather2();//进入天气预报

}

void luck_draw::on_pushButton_jiaju_clicked()
{
    this->hide();//隐藏
    emit enter_home2();//进入智能家具
}

void luck_draw::on_pushButton_jiankong_clicked()
{
    this->hide();//隐藏
    emit enter_tcp2();//进入远程监控
}

void luck_draw::on_pushButton_yinyue_clicked()
{
    this->hide();//隐藏
    emit enter_music2();//进入音乐播放
}

void luck_draw::on_pushButton_yuyin_clicked()
{
    this->hide();//隐藏
    emit enter_audio2();//进入语音识别
}

void luck_draw::on_pushButton_surface_clicked()
{
    this->hide();//隐藏
    emit luck_hide2();//当前界面隐藏,主界面显示信号
}

7.mainsence.cpp    翻金币游戏的背景图片的类 

#include "mainsence.h"
#include "ui_mainsence.h"
#include 
#include "mypushbutton.h"
#include 
#include 
#include 

Mainsence::Mainsence(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Mainsence)
{
    ui->setupUi(this);

    //配置主场景

    //设置固定大小
    setFixedSize(320,588);//设置窗口的初始大小

    //设置图标
    setWindowIcon(QIcon(":/res/Coin0001.png"));

    //设置标题
    setWindowTitle("翻金币主场景");

    //退出按钮实现
    connect(ui->action_quit,&QAction::triggered,[=](){
        this->close();
    });

    //准备开始的音效
    QSound * startSound = new QSound(":/res/TapButtonSound.wav",this);
    //startSound->setLoops(-1);   // 这个函数是播放几次  -1 是无限的播放


    //开始的按钮
    mypushbutton * startBtn  = new mypushbutton(":/res/MenuSceneStartButton.png");
    startBtn->setParent(this);
    startBtn->move((this->width() *0.5) - (startBtn->width()*0.5),this->height()*0.7);
    //实列化选择关卡场景
    chooseScene =new ChooseLevelScene;


    //返回按钮的信号连接
    connect(chooseScene,&ChooseLevelScene::chooseSceneBack,this,[=](){
        this->setGeometry(chooseScene->geometry());//保证两个窗口出现的位置相同
        chooseScene->hide();//选择关卡场景  隐藏
        this->show();//重新显示主场景

    });


    connect(startBtn,&mypushbutton::clicked,[=](){

        //播放点击了开始的音效
        startSound->play();


        qDebug()<<"点击了开始";
        //弹起特效
        startBtn->zoom1();
        startBtn->zoom2();

        //延时进入到选择关卡场景中
        QTimer::singleShot(500,this,[=](){

            //设置chooseScene 场景的位置
            chooseScene->setGeometry(this->geometry());//这个函数的作用就是把 新的这个窗口放到 之前要隐藏的窗口的位置,防止返回的时候,两个窗口位置的不同

            //自身隐藏
            this->hide();

            //进入选择关卡场景中
            //显示选择关卡
            chooseScene->show();

            //监听选择关卡场景的返回按钮的信号



        });

    });
}

Mainsence::~Mainsence()
{
    delete ui;
}


//重新paintEvent 事件, 画背景图
void Mainsence::paintEvent(QPaintEvent *)
{
    QPainter painter(this);//设置一个画家的对象
    QPixmap pix;//定义一个图片的对象
    pix.load(":res/PlayLevelSceneBg.png");//加载图片
    //第一个参数  第二个参数 位置开始的位置 ,参数三 画家对象窗口的宽 ,参数四 画家对象窗口的高  参数五,要加载的图片
    painter.drawPixmap(0,0,this->width(),this->height(),pix);//窗口设置图片  这个函数可以使图片的大小适应窗口的大小
    //画背景图标
    pix.load(":/res/Title.png");//再次加载一个图片
    pix=pix.scaled(pix.width()*0.5,pix.height()*0.5);//得到一个缩放的图片
    painter.drawPixmap(10,30,pix);//再次放置图片 开始的位置是10,30



}

8.mainwindow.cpp    2048 游戏类

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    //输入昵称
    inputInfo = QInputDialog::getText(NULL, "Log in",
                                              "Please input your nickname:",
                                              QLineEdit::Normal,
                                              "Guest",
                                              &OK,
                                              Qt::WindowCloseButtonHint
                                              );
    tempInfo = inputInfo;
    //qDebug()<setupUi(this);
    ui->timelabel->move(60,612);
    ui->scorelabel->move(400,612);
    ui->gamemode->move(60,70);

    connect(ui->classic,&QAction::triggered,[=](){
        newGame();
        moveSound();
        gmode="Classic";gametype=1;
        this->update();
    });
    connect(ui->Time_Limited_2,QAction::triggered,[=](){
        newGame();
        moveSound();
        gmode="Time Limited";gametype=2;
        this->update();
    });
    connect(ui->actionFast_Mode,QAction::triggered,[=](){
        newGame();
        moveSound();
        gmode="Fast Mode";gametype=3;
        this->update();
    });
    connect(ui->actionMax_Number,QAction::triggered,[=](){
            newGame();
            moveSound();
            gmode="Max Number";gametype=4;
            this->update();
        });
    connect(ui->actionDrunk,QAction::triggered,[=](){
            newGame();
            moveSound();
            gmode="Drunk Mode";gametype=5;
            this->update();
        });
    connect(ui->action8402,QAction::triggered,[=](){
            newGame();
            moveSound();
            gmode="8402";gametype=6;
            this->update();
        });
    connect(ui->Ranking,QAction::triggered,[=](){
        QFile file("C:/Users/15723/Documents/codeqt/Qt-2048/res/namelist.txt");
        file.open(QIODevice::ReadOnly);
        QByteArray array=file.readAll();
        file.close();
        QMessageBox::information(this,"Ranking",QString(array));
    });
    connect(ui->actionhelp,QAction::triggered,[=](){
        QFile file("C:/Users/15723/Documents/codeqt/Qt-2048/res/help.txt");
        file.open(QIODevice::ReadOnly);
        QByteArray helparray=file.readAll();
        file.close();
        QMessageBox::information(this,"Help",QString(helparray));
    });

    this->setFixedSize(WINWIDTH,WINHEIGHT);
    this->setWindowTitle("Qt-2048");
    this->setWindowIcon(QPixmap(":/res/image/icon.png"));
    newGame();
    backGroundSound();
    //计时器
    QTimer * timer=new QTimer;
    timer->start(1000);
    QObject::connect(timer,&QTimer::timeout,[=](){
        if(!gameover)
        {
            ui->timelabel->setText(QString::number(++run)+"秒");
            if(gametype==2&&run==60)
            {
                QMessageBox::warning(this,"游戏结束","You get "+QString::number(score)+" points!");
                gametype=0;gameover=true;
                if(OK){
                    QFile file("C:/Users/15723/Documents/codeqt/Qt-2048/res/namelist.txt"); //得分榜地址
                    file.open(QIODevice::Append|QIODevice::Text);
                    tempInfo.append("/"+QString::number(score)+" points/"+"Time Limited"+'\n');
                    file.write(tempInfo.toStdString().data());
                    tempInfo = inputInfo;
                    file.close();
                }
            }
            if(gametype==3&&run-temprun>2)
            {
                QMessageBox::warning(this,"游戏结束","You get "+QString::number(score)+" points!");
                gametype=0;gameover=true;
                if(OK){
                    QFile file("C:/Users/15723/Documents/codeqt/Qt-2048/res/namelist.txt"); //得分榜地址
                    file.open(QIODevice::Append|QIODevice::Text);
                    tempInfo.append("/"+QString::number(score)+" points/"+"Fast Mode"+'\n');
                    file.write(tempInfo.toStdString().data());
                    tempInfo = inputInfo;
                    file.close();
            }
            }
            if(gametype==4&&run==120)
            {
                int Max=0;
                for(int i=0;itimelabel->setText("0秒");
    ui->scorelabel->setText("0分");
    ui->gamemode->setText(gmode);
    srand((unsigned)time(NULL));
    for(int i=0;isetFocusPolicy(Qt::StrongFocus); // Qt焦点事件 打开游戏后可以直接游玩
    if(gametype==5){
            if(event->key()==Qt::Key_Up){
                presstype=1;
                goDown();
            }else if(event->key()==Qt::Key_Down){
                presstype=2;
                goUp();
            }else if(event->key()==Qt::Key_Left){
                presstype=3;
                goRight();
            }else if(event->key()==Qt::Key_Right){
                presstype=4;
                goLeft();
            }else{
                QMessageBox::warning(this,"提示","请用方向键进行游戏!");
                return;
            }
        }
    else{
            if(event->key()==Qt::Key_Up){
                presstype=1;
                goUp();
            }else if(event->key()==Qt::Key_Down){
                presstype=2;
                goDown();
            }else if(event->key()==Qt::Key_Left){
                presstype=3;
                goLeft();
            }else if(event->key()==Qt::Key_Right){
                presstype=4;
                goRight();
            }else{
                QMessageBox::warning(this,"提示","请用方向键进行游戏!");
                return;
            }
        }
    if(!ifArraySame()&&!gameover){
        moveSound();
        setGameArray();
        score=tempscore;
        temprun=run;
        ui->scorelabel->setText(QString::number(score)+"分");
        this->update();
        this->setEnabled(false); // 产生新方块时禁用键盘事件
        QEventLoop eventloop;
        QTimer::singleShot(100, &eventloop, SLOT(quit())); // 延迟1ms产生新方块
        eventloop.exec();
        newBlock();
        this->update();
        this->setEnabled(true);
    }
    ifFail();
    ifWin();
}

// 向上合并方块
void MainWindow::goUp(){
    setTempGameArray();
    tempscore=score;
    for(int i=0;i=0;j--){
                if(!TempGame[i][j]){
                    for(int k=j-1;k>=0;k--){
                        if(TempGame[i][k]){
                            TempGame[i][j]=TempGame[i][k];
                            TempGame[i][k]=0;
                            break;
                        }
                    }
                }
            }
        }
    }
    for(int i=0;i0;j--){
            if(TempGame[i][j]==TempGame[i][j-1]&&TempGame[i][j]&&TempGame[i][j-1]){
                TempGame[i][j]++;
                TempGame[i][j-1]=0;
                if(!test) tempscore+=pow(2,TempGame[i][j]);
                for(int k=j-1;k>0;k--){
                    TempGame[i][k]=TempGame[i][k-1];
                }
                TempGame[i][0]=0;
            }
        }
    }
}

// 向左合并方块
void MainWindow::goLeft(){
    setTempGameArray();
    tempscore=score;
    for(int j=0;j=0;i--){
                if(!TempGame[i][j]){
                    for(int k=i-1;k>=0;k--){
                        if(TempGame[k][j]){
                            TempGame[i][j]=TempGame[k][j];
                            TempGame[k][j]=0;
                            break;
                        }
                    }
                }
            }
        }
    }
    for(int j=0;j0;i--){
            if(TempGame[i][j]==TempGame[i-1][j]&&TempGame[i][j]&&TempGame[i-1][j]){
                TempGame[i][j]++;
                TempGame[i-1][j]=0;
                if(!test) tempscore+=pow(2,TempGame[i][j]);
                for(int k=i-1;k>0;k--){
                    TempGame [k][j]=TempGame[k-1][j];
                }
                TempGame[0][j]=0;
            }
        }
    }
}

// 将Game数组复制到TempGame数组以进行合并操作
void MainWindow::setTempGameArray(){
    for(int i=0;isetMedia(QUrl("qrc:/res/audio/move.mp3"));
    moveplayer->setVolume(30);
    moveplayer->play();
}

// 游戏背景音乐
void MainWindow::backGroundSound(){
    //QMediaPlaylist *playlist = new QMediaPlaylist();
    //playlist->addMedia(QUrl("qrc:/res/audio/back.mp3"));
    //playlist->addMedia(QUrl("qrc:/res/audio/back2.mp3")); // 使用两个音频进行循环
    //playlist->setPlaybackMode(QMediaPlaylist::Loop);
    //playlist->setCurrentIndex(0);
    //QMediaPlayer * backplayer= new QMediaPlayer;
    //backplayer->setPlaylist(playlist);
    //backplayer->setVolume(10);
    //backplayer->play();
}

9. misic_display.cpp    音乐播放器的类

#include "misic_display.h"
#include "ui_misic_display.h"
#include //输出文字
#include //打开文件
#include 
#include 
#include 
#include //只能播放 war 类型的音乐
#include //播放mp3 的音乐
#include //播放mp3 的音乐
#include 
#include 
#include //音乐模式选择
#include //标签
#include //文件
#include 
#include 

Misic_display::Misic_display(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Misic_display)
{
    ui->setupUi(this);
    mediaPayer=new QMediaPlayer;

    /****  加载初始化的资源****/
    fileInit();

    /******** 音量调节的部分 *******/
    ui->verticalSlider->setRange(0,100);//设置进度条
    connect(ui->verticalSlider,&QSlider::sliderMoved,this,[=](qint8 value){
        mediaPayer->setVolume(value);
        ui->label_3->setNum(value);
    });//拖动滑块,让音乐播放的进度改变

    /********* 设置歌曲的总时长 与设置进度条*******/
    connect(mediaPayer,&QMediaPlayer::durationChanged,this,[=](qint64 duration){
        ui->label2->setText(QString("%1:%2").arg(duration/1000/60).arg(duration/1000%60));//把歌曲的总时间写入标签之中
        ui->horizontalSlider->setRange(0,duration);//设置进度条
    });

    /********* 设置歌曲的现在的播放时长********/
    connect(mediaPayer,&QMediaPlayer::positionChanged,this,[=](qint32 duration1){
       ui->label1->setText(QString("%1:%2").arg(duration1/1000/60).arg(duration1/1000%60));//把歌曲的总时间写入标签之中
       ui->horizontalSlider->setValue(duration1);//设置播放的进度条
       if((mediaPayer->position() == mediaPayer->duration())&&(mediaPayer->position() != 0 && mediaPayer->duration() != 0))
       {
            MusicPlaybackMode();
       }
    });

    /********** 设置进度条的拖动功能  *******/
    connect(ui->horizontalSlider,&QSlider::sliderMoved,mediaPayer,&QMediaPlayer::setPosition);//拖动滑块,让音乐播放的进度改变

    /*** 播放速度  ***/
    connect(ui->comboBox_2,&QComboBox::currentTextChanged,this,[=](QString text){//这里有bug
        if(text=="1")
        {
            float rate = 1;
           mediaPayer->setPlaybackRate(rate);
        }
        else if(text=="2")
        {
            float rate = 1.25;
           mediaPayer->setPlaybackRate(rate);
        }
        else if(text=="3")
        {
            float rate = 1.50;
           mediaPayer->setPlaybackRate(rate);
        }
        else if(text=="4")
        {
            float rate = 2;
           mediaPayer->setPlaybackRate(rate);
        }
    });

}




Misic_display::~Misic_display()
{
    delete ui;
}

void Misic_display::slot_surface_show()//界面显示槽函数函数
{
    this->show();//当前界面显示
}
void Misic_display::setHide()//设置界面隐藏
{
    this->hide();
}
void Misic_display::setShow()//设置界面显示
{
    this->show();
}
void Misic_display::fileInit()//初始化,资源文件
{
    musicList.push_back(QString("qrc:/res/1.mp3"));//添加内部资源歌曲
    musicList.push_back(QString("qrc:/res/周杰伦 - 红尘客栈 (Live).mp3"));
    musicList.push_back(QString("qrc:/res/薛之谦 _ 毛不易 - 消愁 (Live).mp3"));
    musicList.push_back(QString("qrc:/res/许嵩 - 城府.mp3"));
    mediaPayer->setVolume(50);//设置音量为 50
    ui->label_3->setNum(50);
    ui->verticalSlider->setValue(50);//设置音乐栏的位置为中间
    GetMusicName();//获取歌单
    Load_music();//加载路径
    ui->listWidget->setCurrentRow(display_number);//给播放的音乐歌曲 加上背景颜色
    float a=1;
    mediaPayer->setPlaybackRate(a);//设置播放速度
}


void Misic_display::music_display_1(int vlaue)//播放本地资源
{
    QString b=musicList.at(vlaue);
    QByteArray a=b.toUtf8();//QString ->QByteArray
    mediaPayer->setMedia(QUrl::fromEncoded(a));//播放本地资源的文件
}

void Misic_display::music_display_2(int vlaue)//播放后来加进来的 音乐
{
    QString b=musicList.at(vlaue);
    mediaPayer->setMedia(QUrl::fromLocalFile(b));//绝对路径
}

void Misic_display::GetMusicName()//获取播放列表的音乐名字
{
    musicList_name.clear();//清除歌单,
    for(int i=0;ilistWidget->clear();//刷新列表
    ui->listWidget->addItems(musicList_name);
    qDebug()<comboBox->currentIndex();//返回当前模式的号码
    QString b = ui->comboBox->currentText();//返回当前的模式的名字
    qDebug()<<"当前的模式为  : "<listWidget->setCurrentRow(display_number);//给播放的音乐歌曲 加上背景颜色
            Load_music();//加载路径
            on_pushButton_3_clicked();//播放音乐
        }
    }
    else if(a==2)//单曲循环
    {
        Load_music();//重新加载路径
        on_pushButton_3_clicked();//播放歌曲
    }
}

void Misic_display::Load_music()//加载播放歌曲的路径
{
    if(display_number<=3)
    {
        music_display_1(display_number);
    }
    else
    {
        music_display_2(display_number);
    }
}

void Misic_display::on_pushButton_1_clicked()
{
    QStringList s = QFileDialog::getOpenFileNames(
                   this, "选择要播放的文件",
                   "D:/QT/QT_coding/musicPLay/music",
                   "视频文件 (*.wav *.mp3)");
       qDebug() << "path=" << s;
       if (!s.isEmpty())//保证使用人选择了文件,预防报错
       {
           for(int i=0;i=0)//判断条件,防止歌曲的数量越界
    {
        display_number--;
        Load_music();//加载播放音乐的路径 //为播放音乐提前做准备
        on_pushButton_3_clicked();
        ui->listWidget->setCurrentRow(display_number);//给播放的音乐歌曲 加上背景颜色
    }
}


void Misic_display::on_pushButton_3_clicked()
{
    mediaPayer->play();//播放音乐
}

void Misic_display::on_pushButton_5_clicked()
{
    if((display_number+1)listWidget->setCurrentRow(display_number);//给播放的音乐歌曲 加上背景颜色
        Load_music();//加载播放音乐的路径 //为播放音乐提前做准备
        on_pushButton_3_clicked();
    }
}

void Misic_display::on_pushButton_4_clicked()
{
      mediaPayer->pause();
}

void Misic_display::on_listWidget_doubleClicked(const QModelIndex &index)//在音乐列表双击的时候可以 播放音乐
{
   display_number=index.row();//获取歌曲列表的双击的行数
   ui->listWidget->setCurrentRow(display_number);//给播放的音乐歌曲 加上背景颜色
   Load_music();//加载播放音乐的路径 //为播放音乐提前做准备
   on_pushButton_3_clicked();
}


void Misic_display::setVolume(qint8 a)//控制音量
{
    if(0<=a && a<=100)
    {
         mediaPayer->setVolume(a);//音量调节
    }
}



void Misic_display::on_pushButton_yuyin_clicked()
{
    this->hide();
    emit enter_audio3();//进入语音识别
}

void Misic_display::on_pushButton_jiaju_clicked()
{
    this->hide();
    emit enter_home3();//进入智能家具
}

void Misic_display::on_pushButton_jiankong_clicked()
{
    this->hide();
    emit enter_tcp3();//进入远程监控
}

void Misic_display::on_pushButton_tioanqi_clicked()
{
    this->hide();
    emit enter_weather3();//进入天气预报
}

void Misic_display::on_pushButton_kuaile_clicked()
{
    this->hide();
    emit enter_luck_draw3();//进入快乐一天
}

void Misic_display::on_pushButton_surface_clicked()
{
    this->hide();
    emit music_hide3();//当前界面隐藏,主界面显示信号
}

10.mycoin.cpp    翻金币游戏类  金币的构造类

#include "mycoin.h"
#include 


//MyCoin::MyCoin(QWidget *parent) : QWidget(parent)
//{

//}

MyCoin::MyCoin(QString btnImg)
{
    QPixmap pix;//建立一个图片的对象
    bool ret=pix.load(btnImg);//加载图片
    if(!ret)//判定图片是否加载成功
    {
        QString str = QString("图片 %1 加载失败").arg(btnImg);
        qDebug()<setFixedSize(pix.width(),pix.height());//设置 金币按钮的大小
    this->setStyleSheet("QPushButton{border:Opx}");//设置为不规则图像的过滤
    this->setIcon(pix);//加载图片,给这个按钮
    this->setIconSize(QSize(pix.width(),pix.height()));//图片大小的设置


    //初始化定时器对象
    timer1 = new QTimer(this);
    timer2 = new QTimer(this);

    //定时器的启动信号的连接
    //监听正面的金币的点击 信号
    connect(timer1,&QTimer::timeout,[=](){
         QPixmap pix;//建立一个图片的对象
         QString str1 = QString(":/res/Coin000%1").arg(this->min++);
           bool ret1=pix.load(str1);
           if(!ret1)
           {
               qDebug()<<"错误  金币正面翻转 "<setFixedSize(pix.width(),pix.height());//设置 金币按钮的大小
        this->setStyleSheet("QPushButton{border:Opx}");//设置为不规则图像的过滤
        this->setIcon(pix);//加载图片,给这个按钮
        this->setIconSize(QSize(pix.width(),pix.height()));//图片大小的设置

           //判断 如果翻完了  将min 重置为 1;
           if(this->min > this->max)
           {
               this->min=1;
               timer1->stop();//定时器发出信号停止
               isAnimation=false;//停止做动画了
           }

    });

    //监听反面的金币的点击 信号
    connect(timer2,&QTimer::timeout,[=](){
         QPixmap pix;//建立一个图片的对象
         QString str1 = QString(":/res/Coin000%1").arg(this->max--);
           bool ret1=pix.load(str1);
           if(!ret1)
           {
               qDebug()<<"错误  金币正面翻转 "<setFixedSize(pix.width(),pix.height());//设置 金币按钮的大小
        this->setStyleSheet("QPushButton{border:Opx}");//设置为不规则图像的过滤
        this->setIcon(pix);//加载图片,给这个按钮
        this->setIconSize(QSize(pix.width(),pix.height()));//图片大小的设置

           //判断 如果翻完了  将min 重置为 1;
           if(this->max < this->min)
           {
               this->max=8;
               timer2->stop();//定时器发出信号停止
               isAnimation=false;//停止做动画了
           }

    });

}

void MyCoin::changeFlag()//改变金币的状态
{
    //如果是正面  翻成反面
    if(this->flag)
    {
        //开始运行正面翻反面的定时器
        timer1->start(30);//启动定时器 时间间隔为30毫秒
        this->flag=false;//把金币的状态改变
        isAnimation=true;//开始做动画了
    }
    else
    {
        //开始运行反面翻正面的定时器
        timer2->start(30);//启动定时器 时间间隔为30毫秒
        this->flag=true;//把金币的状态改变
        isAnimation=true;//开始做动画了
    }

}

//重写 鼠标按下的事件
void MyCoin::mousePressEvent(QMouseEvent * e)
{
    if(this->isAnimation || this->ispaly== false)//当他翻转动作正在执行的时候,我们点击按钮 ,使按钮失效
    {
        return;
    }
    else//没有进行翻转动作的时候,我们把这个信号交给父类处理
    {
        QPushButton::mousePressEvent(e);
    }


}

11.mypushbutton.cpp    翻金币自定义类的 按钮

#include "mypushbutton.h"

//mypushbutton::mypushbutton(QWidget *parent) : QPushButton(parent)
//{

//}
mypushbutton::mypushbutton(QString normalImg,QString pressImg)
{
    this->normaLImgPath = normalImg;//赋值  //初始的状态图片
    this->pressImgPath = pressImg;//鼠标按下去的状态图片

    QPixmap pix;
    bool ret = pix.load(normalImg);//看图片是否加载成功
    if(!ret)
    {
        qDebug() <<"图片加载失败";
        return;
    }

    //设置图片固定大小
    this->setFixedSize(pix.width(),pix.height());
    //设置不规则图片样式
    this->setStyleSheet("QPushButton{border:Opx;}");//去掉周围的空白,只剩图形
    //设置图片
    this->setIcon(pix);
    //设置图标大小
    this->setIconSize(QSize(pix.width(),pix.height()));


}

//弹跳特效
void mypushbutton::zoom1()//向下跳  (这里的按键的 为开始的)
{
    //创建一个动态对象
    QPropertyAnimation * animation =new QPropertyAnimation(this,"geometry");
    //设置动画的事件间隔
    animation->setDuration(200);

    //起始位置
    animation->setStartValue(QRect(this->x(),this->y(),this->width(),this->height()));
    //结束位置
    animation->setEndValue(QRect(this->x(),this->y()+10,this->width(),this->height()));

    //设置弹跳曲线
    animation->setEasingCurve(QEasingCurve::OutBounce);

    //执行动画
    animation->start();


}

void mypushbutton::zoom2()//向上跳
{
    //创建一个动态对象
    QPropertyAnimation * animation =new QPropertyAnimation(this,"geometry");
    //设置动画的事件间隔
    animation->setDuration(200);

    //起始位置
    animation->setStartValue(QRect(this->x(),this->y()+10,this->width(),this->height()));
    //结束位置
    animation->setEndValue(QRect(this->x(),this->y(),this->width(),this->height()));

    //设置弹跳曲线
    animation->setEasingCurve(QEasingCurve::OutBounce);

    //执行动画
    animation->start();
}



void mypushbutton::mousePressEvent(QMouseEvent * e)//鼠标按下去的一瞬间, 这个按钮加载的图片改变, 变为另外一种状态 按下去的状态,与初始的状态的图片,有细微的改变,这样形成一种动态的效果
{

    if(this->pressImgPath !="")//传入的按下的图片不为空, 说明需要有按下状态 切换图片
    {
        QPixmap pix;
        bool ret = pix.load(this->pressImgPath);//看图片是否加载成功
        if(!ret)
        {
            qDebug() <<"图片加载失败";
            return;
        }

        //设置图片固定大小
        this->setFixedSize(pix.width(),pix.height());
        //设置不规则图片样式
        this->setStyleSheet("QPushButton{border:Opx;}");//去掉周围的空白,只剩图形
        //设置图片
        this->setIcon(pix);
        //设置图标大小
        this->setIconSize(QSize(pix.width(),pix.height()));

    }
    //让父类执行其他的内容

    return QPushButton::mousePressEvent(e);

}

void mypushbutton::mouseReleaseEvent(QMouseEvent * e)//鼠标释放之后的状态为  这个按钮的加载图片的改变  变为之前的还没有改变的状态
{

    if(this->pressImgPath !="")//传入的按下的图片不为空, 说明需要有按下状态 切换初始的图片
    {
        QPixmap pix;
        bool ret = pix.load(this->normaLImgPath);//看图片是否加载成功
        if(!ret)
        {
            qDebug() <<"图片加载失败";
            return;
        }

        //设置图片固定大小
        this->setFixedSize(pix.width(),pix.height());
        //设置不规则图片样式
        this->setStyleSheet("QPushButton{border:Opx;}");//去掉周围的空白,只剩图形
        //设置图片
        this->setIcon(pix);
        //设置图标大小
        this->setIconSize(QSize(pix.width(),pix.height()));
    }

    //让父类执行其他的内容
    return QPushButton::mouseReleaseEvent(e);


}

12. playscene.h  翻金币的音乐播放,成功判断类

#include "playscene.h"
#include 
#include 
#include 
#include "mypushbutton.h"
#include 
#include 
#include "mycoin.h"
#include "dataconfig.h"
#include 
#include 


//PlayScene::PlayScene(QWidget *parent) : QMainWindow(parent)
//{

//}

PlayScene::PlayScene(int levelNum)//构造函数
{
    QString str=QString("进入了第 %1  关").arg(levelNum);//进入关卡的体术语句
    qDebug()<levelIndex=levelNum;//内部成员赋值

    //初始化游戏的场景
    //设置固定大小
    this->setFixedSize(320,588);
    //设置图标
    this->setWindowIcon(QPixmap(":/res/Coin0001.png"));//就是最上面的窗口名称旁边的图标
    //设置标题
    this->setWindowTitle("翻金币场景");

    //创建菜单栏
    QMenuBar * bar = menuBar();//创建一个菜单栏的对象,这个对象是空的
    setMenuBar(bar);//把菜单栏对象,放置到窗口

    //创建开始菜单
    QMenu * startMenu = bar->addMenu("开始");

    //创建退出  菜单选项
    QAction * quitAction = startMenu->addAction("退出");

    //点击退出  实现退出游戏
    connect(quitAction,&QAction::triggered,[=](){
       this->close();
    });


    //添加音效
    //返回按钮的音效
    QSound * backSound = new QSound(":/res/TapButtonSound.wav",this);
    //翻金币的音效
    QSound * flipSound = new QSound(":/res/ConFlipSound.wav",this);
    //成功胜利的音效
    QSound * winSound = new QSound(":/res/LevelWinSound.wav",this);

    //返回按钮
    mypushbutton * backBtn = new mypushbutton(":/res/BackButton.png", ":/res/BackButtonSelected.png");//这两个图片有细微的差别,这样构成了一个动态的感觉
    backBtn->setParent(this);
    backBtn->move(this->width() - backBtn->width(),this->height() - backBtn->height());

    //点击返回
    connect(backBtn,&mypushbutton::clicked,[=](){
        //点击了返回的音效
        backSound->play();

       qDebug()<<"点击了 游戏场景里面的 返回按键";

       //告诉主场景,我返回了,主场景监听 chooseLeveScene 的返回按键

       //延时发送信号
       QTimer::singleShot(500,this,[=](){
           emit this->chooseSceneBack();//激发信号  返回开始界面

       });

    });

    //显示当前关卡数
    QLabel * label = new QLabel;
    label->setParent(this);//设置父亲
    QFont font;//设置字体的对象
    font.setFamily("华文新魏");//字体的格式
    font.setPointSize(20);//字体大小为 20

    //输出的标签显示的内容
    QString  str1=QString("Level: %1").arg(this->levelIndex);

    //将字体的设置加入标签空间之中
    label->setFont(font);

    label->setText(str1);//设置关卡的标签显示的内容
    //label->setFixedSize(20,20);//设置标签的大小
    //label->move(100,500);//设置标签的显示的位置在哪里
    label->setGeometry(30,this->height() -50 ,150,50);//这个上面 两个命令的合并的功能


    dataconfig config;//第一个对象 获取关卡的数据
    //初始化每个关卡的二维数组
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            this->gameArray[i][j]=config.mData[this->levelIndex][i][j];//赋值
        }
    }

    //胜利的图片显示,
    //开始的时候我们把他放到屏幕之外  等到胜利之后我们直接让他掉下来
    QLabel * winLabel = new QLabel;
    QPixmap tmaPix;
    tmaPix.load(":/res/LevelCompletedDialogBg.png");//加载图片
    winLabel->setGeometry(0,0,tmaPix.width(),tmaPix.height());//设置标签里面放置的位置
    winLabel->setPixmap(tmaPix);//把图片放入到标签
    winLabel->setParent(this);//设置标签的父亲
    winLabel->move((this->width() - tmaPix.width())*0.5,-tmaPix.height());//设置标签在窗口的位置


    //显示金币背景图案 灰色的方形框框
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            //绘制背景图片
            QPixmap pix = QPixmap(":/res/BoardNode(1).png");//加载图片
            QLabel * label = new QLabel;//新建一个标签
            label->setGeometry(0,0,pix.width(),pix.height());//设置标签里面放置的位置
            label->setPixmap(pix);//把图片放入到标签
            label->setParent(this);//设置标签的父亲
            label->move(57+i*50,200+j*50);//设置标签在窗口的位置


            //创建金币
            if(this->gameArray[i][j]==1)
            {
                //显示金币
                str=":/res/Coin0001.png";
            }
            else
            {
                //显示银币
                str=":/res/Coin0008.png";
            }

            MyCoin *coin = new MyCoin(str);//建立一个金币的对象,并且在这个里面加载图片
            coin->setParent(this);//设置父亲,对于这个按钮 父亲为游戏显示场景
            coin->move(59+ i*50, 204 + j*50);//移动金币的位置,与灰色的框框对齐

            //给金币的属性赋值
            coin->posX=i;//x 坐标
            coin->posY=j;//y 坐标
            coin->flag=this->gameArray[i][j];//正面是 1  反面是 0

            //将金币放到  金币的二维数组里  以便后期的维护
            coinBtn[i][j]=coin;//


            //点击金币  进行翻转
            //他的本质 继承的是  QPushButton
            //监听点击信号
            connect(coin,&MyCoin::clicked,[=](){
                //翻金币的音效
                flipSound->play();

                coin->changeFlag();//点击之后进行翻转
                this->gameArray[i][j]=(this->gameArray[i][j]==0 ? 1:0);

                //加一个延时的翻转
                QTimer::singleShot(100,this,[=](){
                    //翻转周围的金币
                    //周围的右侧金币翻转的条件
                    if(coin->posX+1 <=3)
                    {
                        coinBtn[coin->posX+1][coin->posY]->changeFlag();
                        this->gameArray[coin->posX+1][coin->posY] = (this->gameArray[coin->posX+1][coin->posY]==0 ? 1:0);
                    }
                    //周围的左侧金币翻转的条件
                    if(coin->posX-1 >=0)
                    {
                        coinBtn[coin->posX-1][coin->posY]->changeFlag();
                        this->gameArray[coin->posX-1][coin->posY] = (this->gameArray[coin->posX-1][coin->posY]==0 ? 1:0);
                    }
                    //周围的上侧金币翻转的条件
                    if(coin->posY+1 <=3)
                    {
                        coinBtn[coin->posX][coin->posY+1]->changeFlag();
                        this->gameArray[coin->posX][coin->posY+1] = (this->gameArray[coin->posX][coin->posY+1]==0 ? 1:0);
                    }
                    //周围的下侧金币翻转的条件
                    if(coin->posY-1 >=0)
                    {
                        coinBtn[coin->posX][coin->posY-1]->changeFlag();
                        this->gameArray[coin->posX][coin->posY-1] = (this->gameArray[coin->posX][coin->posY-1]==0 ? 1:0);
                    }

                    //判断是否胜利
                    this->isWin=true;
                    for(int i=0;i<4;i++)
                    {
                        for(int j=0;j<4;j++)
                        {
                            if(coinBtn[i][j]->flag==false)
                            {
                                this->isWin=false;
                                break;
                            }
                        }
                    }
                    if(this->isWin==true)//胜利了
                    {
                        //游戏胜利的音效
                        winSound->play();


                        qDebug()<<"第"<ispaly=false;//金币按钮不可以使用
                            }
                        }






                        //创建一个动态对象
                        QPropertyAnimation * animation1 =new QPropertyAnimation(winLabel,"geometry");
                        //设置动画的事件间隔
                        animation1->setDuration(1000);

                        //起始位置
                        animation1->setStartValue(QRect(winLabel->x(),winLabel->y(),winLabel->width(),winLabel->height()));
                        //结束位置
                        animation1->setEndValue(QRect(winLabel->x(),winLabel->y()+144,winLabel->width(),winLabel->height()));

                        //设置弹跳曲线
                        animation1->setEasingCurve(QEasingCurve::OutBounce);

                        //执行动画
                        animation1->start();


                    }


                });



            });


        }
    }

}

//QWidget中的paintEvent事件处理器可以在子类中被重写来接收绘图事件,然后在指定区域完成图形的绘制。
//重写paintEvent事件
void PlayScene::paintEvent(QPaintEvent * )
{
    QPainter painter(this);//设置一个画家的对象
    QPixmap pix;//定义一个图片的对象
    pix.load(":res/PlayLevelSceneBg.png");//加载图片
    //第一个参数  第二个参数 位置开始的位置 ,参数三 画家对象窗口的宽 ,参数四 画家对象窗口的高  参数五,要加载的图片
    painter.drawPixmap(0,0,this->width(),this->height(),pix);//窗口设置图片  这个函数可以使图片的大小适应窗口的大小
    //画背景图标
    pix.load(":/res/Title.png");//再次加载一个图片
    pix=pix.scaled(pix.width()*0.5,pix.height()*0.5);//得到一个缩放的图片
    painter.drawPixmap(10,30,pix);//再次放置图片 开始的位置是10,30

}

13. register.h 账号密码的注册界面  

#include "register.h"
#include "ui_register.h"
#include "sql.h"

Register::Register(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Register)
{
    ui->setupUi(this);
    Sql kk;
    kk.Init(db);//初始化,保证数据库的存在
    Init();
}

Register::~Register()
{

    delete ui;
}

void Register::register_return_show()//当前界面显示
{
    this->show();//显示当前界面
}
void Register::register_return_hide()//当前界面隐藏
{
    this->hide();//隐藏当前界面
}
QString Register::getUser()//获取账号信息
{
    QString a= ui->lineEdit_user1->text();//获取当前的账号信息
    qDebug()<<"获取的账号信息 : "<lineEdit_pass1->text();//获取当前的密码信息
    qDebug()<<"获取的密码信息 : "<addButton(ui->radioButton,0);                   //一个值为0
    block1->addButton(ui->radioButton_2,1);                 //一个值为1
    ui->radioButton->setChecked(1);                         //默认为男性

    connect(ui->pushButton,&QPushButton::clicked,[=](){ //点击注册按钮,检测数据是否存在,检测的是账号 , 防止个人信息重复
            QString a=getUser();//获取注册的账号
            QString b=getPassword();//获取注册的密码
            QString c=getSex();//获取注册的性别
            int d=getAge();//获取注册的年龄
            QString dd=QString::number(d);
            People hh(a,b,c,dd);
            Sql kk;//
            bool oo = kk.addSql(hh,db);//往数据库增加数据
            if(oo==false)
            {
                QMessageBox::warning(this,"提示信息","注册失败","确定");
                 qDebug()<<"注册信息失败!";
                 emit regsiter_close();//激发信号,注册界面关闭函数
            }
            else
            {
                QMessageBox::warning(this,"提示信息","注册成功","确定");
                 ui->lineEdit_pass1->clear();//清除原来的痕迹
                 ui->lineEdit_user1->clear();//清除原来的痕迹
                 emit regsiter_close();//激发信号,注册界面关闭函数
            }


    });
}
QString Register::getSex()//返回性别信息
{
    qDebug()<<"进入返回性别";
    if(ui->radioButton->isCheckable()==true)//选中的是男性
    {
        QString b("男");
         qDebug()<<"获取的sex : "<radioButton_2->isCheckable()==true)//选中的是女性
    {
        QString b("女");
        qDebug()<<"获取的sex : "<spinBox->value();//获取显示的年龄
    qDebug()<<"获取的年龄: "<

14. sign_in.h 账号登录模块

#include "sign_in.h"
#include "ui_sign_in.h"
#include 

Sign_in::Sign_in(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Sign_in)
{
    ui->setupUi(this);
    Init();
    connect(ui->checkBox,&QCheckBox::stateChanged,[=](bool value){
            //qDebug()<<"sdasda";
            if(ui->checkBox->isChecked()==false)
            {
                lineEdit_pass_open();//开启密码保护
            }
            else
            {
                lineEdit_pass_close();//关闭密码保护
            }
    });
}

Sign_in::~Sign_in()
{

    delete ui;
}
void Sign_in::sign_in_return_show()//显示当前界面显示函数
{
    this->show();//界面显示函数
}
void Sign_in::sign_in_return_hide()//当前函数隐藏函数
{
    this->hide();//界面隐藏函数
}
void Sign_in::lineEdit_pass_open()//开启密码保护
{
    ui->lineEdit_pass->setEchoMode(QLineEdit::Password);//开启密码保护
}
void Sign_in::lineEdit_pass_close()//关闭密码保护
{
    ui->lineEdit_pass->setEchoMode(QLineEdit::Normal);//关闭密码保护
}
QString Sign_in::getUser()//获取账号信息
{
    QString a= ui->lineEdit_user->text();//获取当前的账号信息
    return a;
}
QString Sign_in::getPassword()//获取密码信息
{
    QString a= ui->lineEdit_pass->text();//获取当前的账号信息
    return a;
}
void Sign_in::Init()//初始化函数, 功能: 建立信号的连接,(显示密码部分) (登录,注册按键部分) 占位符的提示语句
{
    ui->lineEdit_user->setPlaceholderText("请输入账号");//占位符号,提示输入账号
    ui->lineEdit_pass->setPlaceholderText("请输入密码");//占位符号,提示输入密码
    register1 = new Register;//实例化对象  这个东西不能删
    widget1 = new Widget;//实列化对象  主界面的类
    lineEdit_pass_open();//开启密码保护
    //QCheckBox


    //注册按钮的信号连接
    connect(ui->pushButton_register,&QPushButton::clicked,this,&Sign_in::sign_in_return_hide);//当按下注册按钮的时候  隐藏当前界面
    connect(ui->pushButton_register,&QPushButton::clicked,[=](){  //当按下注册按钮的时候  显示注册界面
        register1->show();
        connect(register1,&Register::regsiter_close,[=](){  //当注册界面关闭的时候,  显示当前界面
                this->show();//显示当前的窗口
                register1->hide();//隐藏
        });
    });

    //登录按钮的信号连接
    connect(ui->pushButton_sign,&QPushButton::clicked,[=]{
        Sql kk;
        QString a1=getUser();//获取账号
        QString a2=getPassword();//获取密码
        People aa(a1,a2,"1","1");//后面两个数据不需要匹配
        bool ok = kk.checkSql(aa,*(register1->getQsqlDatabase()));
        if(ok == false)
        {
            qDebug()<<"账号密码错误";
            QMessageBox::warning(this,"提示信息", "账号密码错误","确定");
        }
        else//登录成功
        {
            qDebug()<<"登陆成功";
            this->close();//登录界面关闭
            widget1->show();//显示主界面
        }


    });



}

15.sql.h  数据库sqlite3 模块

#include "sql.h"
#include 
#include 
Sql::Sql(QWidget *parent) : QWidget(parent)
{

}

void Sql::Init(QSqlDatabase &db)//初始化函数, 主要是 实例化对象 建立数据库, 第二个,
{
    db = QSqlDatabase::addDatabase("QSQLITE");		//设置数据库驱动
    /*----- 设置主机信息 -----*/
    db.setDatabaseName("user.db"); 			//设置数据库名称
    /*----- 读数据库操作 -----*/
    bool ok = db.open();
    if(ok==false)
    {
        qDebug()<< "打开数据库失败";
    }
    else
    {
        qDebug()<<"打开数据库成功";
    }

    //创建一个表 来存储信息
    QSqlQuery sql(db);
    QString str_sql = "create table user(user text primary  key,pass text not null,sex text,age interger);";//唯一的账号, 密码不为空, QSting 类型的 sex   int  类型的 age
    if(sql.exec(str_sql) == false)
    {
        qDebug() << "执行SQL失败  建表失败:" << sql.lastError() << endl;
    }
    else
    {
        qDebug() << "执行成功SQL语句  建表成功" << endl;
    }


}
bool Sql::addSql(People a,QSqlDatabase &db)//插入数据
{
        QSqlQuery sql(db);
        QString str_sql_insert = QString("insert into user values('%1','%2','%3','%4');").arg(a.m_user,a.m_passWord,a.m_sex,a.m_age);//生成语句
        if(sql.exec(str_sql_insert) == false)
        {
            qDebug() << "执行SQL失败  插入数据失败:" << sql.lastError() << endl;
            return false;
        }
        else
        {
            qDebug() << "执行成功SQL语句  插入数据成功" << endl;
            return true;
        }
}
bool Sql::deleteSql(People a,QSqlDatabase &db)//删除数据
{

}

bool Sql::checkSql(People a,QSqlDatabase &db)//检测是否含有这个数据正确
{
    qDebug()<<"a.m_user: "<

16.start_home.h  智能家具模块

#include "start_home.h"
#include "ui_start_home.h"
#include 
start_home::start_home(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::start_home)
{
    ui->setupUi(this);
    lianjie=false;
    connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(slot_lianjie()));
    TcpSocket = new QTcpSocket(this);
    //按钮颜色初始化
    ui->pushButton_master_bedroom->setStyleSheet(" background-color: rgb(255, 255, 255);");
    ui->pushButton_living_room->setStyleSheet(" background-color: rgb(255, 255, 255);");
    ui->pushButton_secondary_bedroom->setStyleSheet(" background-color: rgb(255, 255, 255);");
    ui->pushButton_kitchen->setStyleSheet(" background-color: rgb(255, 255, 255);");
    ui->pushButton_wc->setStyleSheet(" background-color: rgb(255, 255, 255);");
    ui->pushButton_corridor->setStyleSheet(" background-color: rgb(255, 255, 255);");
    ui->pushButton_balcony->setStyleSheet(" background-color: rgb(255, 255, 255);");

}

void start_home::slot_surface_show()//界面显示槽函数函数
{
    this->show();//当前界面显示
}

void start_home::slot_lianjie()//连接服务器
{
    if(ui->pushButton->text()=="连接")
    {
        QString ip=ui->lineEdit->text();
        QString port=ui->lineEdit_2->text();
        int hh=port.toInt();
        if(ip=="" || port=="")
        {
            QMessageBox::warning(this,"提示窗口","参数错误","确定");
            return;
        }
        connect(TcpSocket,SIGNAL(connected()),this,SLOT(slot_connected()));
        TcpSocket->connectToHost(QHostAddress(ip),hh);//连接服务器
    }
    else
    {
        lianjie=false;
        disconnect(TcpSocket,SIGNAL(connected()),this,SLOT(slot_connected()));
        disconnect(TcpSocket,SIGNAL(readyRead()),this,SLOT(slot_TcpSocket_readyRead()));
       // delete TcpSocket;
        ui->pushButton->setText("连接");
        delete TcpSocket;
        TcpSocket = new QTcpSocket(this);
    }


}


void start_home::slot_connected()//连接成功
{
    //QMessageBox::warning(this,"提示窗口","连接成功","确定");
    lianjie=true;
    connect(TcpSocket,SIGNAL(readyRead()),this,SLOT(slot_TcpSocket_readyRead()));
    ui->pushButton->setText("断开连接");
}
start_home::~start_home()
{
    delete ui;
}



void start_home::receive_number(int a)//接收信号做出反应
{
    if(a==1)//客厅灯开
    {
        if(ui->pushButton_living_room->text()=="关")
        {
            on_pushButton_living_room_clicked();//变为打开
            //send_number(1);//保证客户端也为 开
        }
    }
    else if(a==2) //客厅灯关
    {
        if(ui->pushButton_living_room->text()=="开")
        {
            on_pushButton_living_room_clicked();//变为关闭
            //send_number(2);//保证客户端也为 关闭
        }
    }
    //
    else if(a==3) //主卧灯开
    {
        if(ui->pushButton_master_bedroom->text()=="关")
        {
            on_pushButton_master_bedroom_clicked();//变为开启
            //send_number(3);//保证客户端也为 开
        }
    }
    else if(a==4)
    {
        if(ui->pushButton_master_bedroom->text()=="开")
        {
            on_pushButton_master_bedroom_clicked();//变为开启
            //send_number(4);//4 关闭
        }
    }

    //
    else if(a==5) //次卧灯开
    {
        if(ui->pushButton_secondary_bedroom->text()=="关")
        {
            on_pushButton_secondary_bedroom_clicked();//变为开启
            //send_number(5);//保证客户端也为 开
        }
    }
    else if(a==6)
    {
        if(ui->pushButton_secondary_bedroom->text()=="开")
        {
            on_pushButton_secondary_bedroom_clicked();//变为开启
           // send_number(6);//4 关闭
        }
    }
    //
    else if(a==7) //厨房灯开
    {
        if(ui->pushButton_kitchen->text()=="关")
        {
            on_pushButton_kitchen_clicked();//变为开启
            //send_number(7);//保客户端也为 开
        }
    }
    else if(a==8)
    {
        if(ui->pushButton_kitchen->text()=="开")
        {
            on_pushButton_kitchen_clicked();//变为开启
            //send_number(8);//4 关闭
        }
    }

    //
    else if(a==9) //厕所灯开
    {
        if(ui->pushButton_wc->text()=="关")
        {
            on_pushButton_wc_clicked();//变为开启
           // send_number(9);//保客户端也为 开
        }
    }
    else if(a==10)
    {
        if(ui->pushButton_wc->text()=="开")
        {
            on_pushButton_wc_clicked();//变为开启
            //send_number(10);//4 关闭
        }
    }

    //
    else if(a==11) //厕所灯开
    {
        if(ui->pushButton_corridor->text()=="关")
        {
            on_pushButton_corridor_clicked();//变为开启
            //send_number(11);//保客户端也为 开
        }
    }
    else if(a==12)
    {
        if(ui->pushButton_corridor->text()=="开")
        {
            on_pushButton_corridor_clicked();//变为开启
            //send_number(12);//4 关闭
        }
    }

    //
    else if(a==13) //阳台灯开
    {
        if(ui->pushButton_balcony->text()=="关")
        {
            on_pushButton_balcony_clicked();//变为开启
            //send_number(13);//保客户端也为 开
        }
    }
    else if(a==14)
    {
        if(ui->pushButton_balcony->text()=="开")
        {
            on_pushButton_balcony_clicked();//变为开启
           // send_number(14);//4 关闭
        }
    }


}

void start_home::send_number(int a)//发送信号
{
    if(lianjie==true)
    {
        qDebug()<<"发送信号:"<write(aa);//向服务器发送数据

    }

}



void start_home::slot_TcpSocket_readyRead()
{

     QByteArray buf = TcpSocket->readAll();
     int a1=buf.toInt();
     if(a1>15)
     {
         if(buf.size()==10)
         {
             QString pp(buf);
             QString yy;
             yy=pp[0];
             int a2=yy.toInt();
             yy=pp[1];
             int a3=yy.toInt();
             yy=pp[2];
             int a4=yy.toInt();
             yy=pp[3];
             int a5=yy.toInt();
             yy=pp[4];
             int a6=yy.toInt();
             yy=pp[5];
             int a7=yy.toInt();
             yy=pp[6];
             int a8=yy.toInt();
             yy=pp[7];
             int a9=yy.toInt();
             yy=pp[8];
             int a0=yy.toInt();
             yy=pp[9];
             int a10=yy.toInt();
             receive_number(a2);
             receive_number(a3);
             receive_number(a4);
             receive_number(a5);
             receive_number(a6*10+a7);
             receive_number(a8*10+a9);
             receive_number(a0*10+a10);
         }
         else if(buf.size()==9)
         {
             QString pp(buf);
             QString yy;
             yy=pp[0];
             int a2=yy.toInt();
             yy=pp[1];
             int a3=yy.toInt();
             yy=pp[2];
             int a4=yy.toInt();
             yy=pp[3];
             int a5=yy.toInt();
             yy=pp[4];
             int a6=yy.toInt();
             yy=pp[5];
             int a7=yy.toInt();
             yy=pp[6];
             int a8=yy.toInt();
             yy=pp[7];
             int a9=yy.toInt();
             yy=pp[8];
             int a0=yy.toInt();
             receive_number(a2);
             receive_number(a3);
             receive_number(a4);
             receive_number(a5);
             receive_number(a6);
             receive_number(a7*10+a8);
             receive_number(a9*10+a0);
         }
     }
     else
     {
        receive_number(a1);
     }

    qDebug() << "消息接收成功"<pushButton_living_room->text()=="关")
    {
        ui->label_lamp_living_room->setPixmap(QPixmap(":/image/image/发光灯泡.png"));
        ui->pushButton_living_room->setText("开");
        ui->pushButton_living_room->setStyleSheet(" background-color: rgb(239, 239, 119);");
        send_number(1);

    }
    else if(ui->pushButton_living_room->text()=="开")
    {
        ui->label_lamp_living_room->setPixmap(QPixmap(":/image/image/关灯.png"));
        ui->pushButton_living_room->setText("关");
        ui->pushButton_living_room->setStyleSheet(" background-color: rgb(255, 255, 255);");
        send_number(2);
    }
}

//主卧
void start_home::on_pushButton_master_bedroom_clicked()
{
    if(ui->pushButton_master_bedroom->text()=="关")
    {
        ui->label_lamp_master_bedroom->setPixmap(QPixmap(":/image/image/发光灯泡.png"));
        ui->pushButton_master_bedroom->setText("开");
        ui->pushButton_master_bedroom->setStyleSheet(" background-color: rgb(239, 239, 119);");
        send_number(3);

    }
    else if(ui->pushButton_master_bedroom->text()=="开")
    {
        ui->label_lamp_master_bedroom->setPixmap(QPixmap(":/image/image/关灯.png"));
        ui->pushButton_master_bedroom->setText("关");
        ui->pushButton_master_bedroom->setStyleSheet(" background-color: rgb(255, 255, 255);");
        send_number(4);
    }
}

//次卧
void start_home::on_pushButton_secondary_bedroom_clicked()
{
    if(ui->pushButton_secondary_bedroom->text()=="关")
    {
        ui->label_lamp_secondary_bedroom->setPixmap(QPixmap(":/image/image/发光灯泡.png"));
        ui->pushButton_secondary_bedroom->setText("开");
        ui->pushButton_secondary_bedroom->setStyleSheet(" background-color: rgb(239, 239, 119);");
        send_number(5);

    }
    else if(ui->pushButton_secondary_bedroom->text()=="开")
    {
        ui->label_lamp_secondary_bedroom->setPixmap(QPixmap(":/image/image/关灯.png"));
        ui->pushButton_secondary_bedroom->setText("关");
        ui->pushButton_secondary_bedroom->setStyleSheet(" background-color: rgb(255, 255, 255);");
        send_number(6);
    }
}

//厨房
void start_home::on_pushButton_kitchen_clicked()
{
    if(ui->pushButton_kitchen->text()=="关")
    {
        ui->label_lamp_kitchen->setPixmap(QPixmap(":/image/image/发光灯泡.png"));
        ui->pushButton_kitchen->setText("开");
        ui->pushButton_kitchen->setStyleSheet(" background-color: rgb(239, 239, 119);");
        send_number(7);
    }
    else if(ui->pushButton_kitchen->text()=="开")
    {
        ui->label_lamp_kitchen->setPixmap(QPixmap(":/image/image/关灯.png"));
        ui->pushButton_kitchen->setText("关");
        ui->pushButton_kitchen->setStyleSheet(" background-color: rgb(255, 255, 255);");
        send_number(8);
    }
}

//厕所
void start_home::on_pushButton_wc_clicked()
{
    if(ui->pushButton_wc->text()=="关")
    {
        ui->label_lamp_wc->setPixmap(QPixmap(":/image/image/发光灯泡.png"));
        ui->pushButton_wc->setText("开");
        ui->pushButton_wc->setStyleSheet(" background-color: rgb(239, 239, 119);");
        send_number(9);
    }
    else if(ui->pushButton_wc->text()=="开")
    {
        ui->label_lamp_wc->setPixmap(QPixmap(":/image/image/关灯.png"));
        ui->pushButton_wc->setText("关");
        ui->pushButton_wc->setStyleSheet(" background-color: rgb(255, 255, 255);");
        send_number(10);
    }
}

//走廊
void start_home::on_pushButton_corridor_clicked()
{
    if(ui->pushButton_corridor->text()=="关")
    {
        ui->label_lamp_corridor->setPixmap(QPixmap(":/image/image/发光灯泡.png"));
        ui->pushButton_corridor->setText("开");
        ui->pushButton_corridor->setStyleSheet(" background-color: rgb(239, 239, 119);");
        send_number(11);
    }
    else if(ui->pushButton_corridor->text()=="开")
    {
        ui->label_lamp_corridor->setPixmap(QPixmap(":/image/image/关灯.png"));
        ui->pushButton_corridor->setText("关");
        ui->pushButton_corridor->setStyleSheet(" background-color: rgb(255, 255, 255);");
        send_number(12);
    }
}

void start_home::on_pushButton_balcony_clicked()
{
    if(ui->pushButton_balcony->text()=="关")
    {
        ui->label_lamp_balcony->setPixmap(QPixmap(":/image/image/发光灯泡.png"));
        ui->pushButton_balcony->setText("开");
        ui->pushButton_balcony->setStyleSheet(" background-color: rgb(239, 239, 119);");
        send_number(13);
    }
    else if(ui->pushButton_balcony->text()=="开")
    {
        ui->label_lamp_balcony->setPixmap(QPixmap(":/image/image/关灯.png"));
        ui->pushButton_balcony->setText("关");
        ui->pushButton_balcony->setStyleSheet(" background-color: rgb(255, 255, 255);");
        send_number(14);
    }
}

void start_home::on_pushButton_yuyin_clicked()
{
    this->hide();
    emit enter_audio4();//进入语音识别
}

void start_home::on_pushButton_tianqi_clicked()
{
    this->hide();
    emit enter_weather4();//进入天气预报
}

void start_home::on_pushButton_jiankong_clicked()
{
    this->hide();
    emit  enter_tcp4();//进入远程监控
}

void start_home::on_pushButton_yinyue_clicked()
{
    this->hide();
    emit  enter_music4();//进入音乐播放
}

void start_home::on_pushButton_kuaile_clicked()
{
    this->hide();
    emit enter_luck_draw4();//进入快乐一天
}

void start_home::on_pushButton_surface_clicked()
{
    this->hide();
    emit home_hide4();//当前界面隐藏,主界面显示信号
}

17.tcp_image.h  远程监控模块

#include "tcp_image.h"
#include "ui_tcp_image.h"

TCP_image::TCP_image(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TCP_image)
{
    ui->setupUi(this);
    TCP_state=false;//连接状态为 无连接
    display_state=false;//没有播放
}

TCP_image::~TCP_image()
{
    delete ui;
}

void TCP_image::slot_surface_show()//界面显示槽函数函数
{
    this->show();//当前界面显示
}


void TCP_image::analysis_Json(QByteArray data)//解析JSON
{
    qDebug()<<"进入解析模块";
    QJsonParseError err;
    QJsonDocument doc = QJsonDocument::fromJson(data,&err);
    if(err.error != QJsonParseError::NoError) //检测是否是json格式
    {
        qDebug()<<"json error";
    }
    QJsonObject obj = doc.object();
    qDebug()<<"输出obj :"<listWidget->addItem(QString("服务器说: "+ aa));
}
void TCP_image::analysis_Qstring(QJsonObject obj)//解析语句
{
    for(int i=0;i<100;i++)
    {
      qDebug()<<"进入图片解析";
    }
    int kk=obj["size"].toInt();
    QString hh=obj["QString"].toString();//解析的
    qDebug()<<"hh= "<listWidget->addItem(QString("服务器说: "+ hh));
}


void TCP_image::analysis_image(QJsonObject obj)//解析图片
{
    qDebug()<<"进入图片解析";
    int kk=obj["size"].toInt();
    qDebug()<<"size:=="<label_1->setPixmap(QPixmap::fromImage(image));
    }

}



typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
void TCP_image::slot_TcpSocket_readyRead()
{
    qDebug()<<"接收数据成功";
    static u8 type = 0; //接收到0xAA,我的长度来了
    static size_t size = 0;
    static QByteArray data;

    if(size == 0)
    {
        TcpSocket->read((char *)&type,sizeof(type)); //读取类型
        if(type == 0xAA)
        {
            TcpSocket->read((char *)&size,sizeof(size)); //读取类型
            data.clear();
            type = 0;
        }
    }

    if(size > 0)
    {
        QByteArray buf = TcpSocket->read(size); //读取类型
        data.append(buf);
        size -= buf.size();
        if(size <= 0)
        {
            qDebug()<<"接收成功";
            analysis_Json(data);//解析JSON

        }
    }


}

#include 
void TCP_image::on_pushButton_clicked()//连接
{
    if(TCP_state==false)
    {
        QString ip=ui->lineEdit->text();
        QString port=ui->lineEdit_2->text();
        if(ip=="" || port=="")
        {
            ui->listWidget->addItem("参数不完整");
            return;
        }
        int kk=port.toInt();
        TcpSocket = new QTcpSocket(this);
        TcpSocket->connectToHost(QHostAddress(ip),kk);
        connect(TcpSocket,SIGNAL(readyRead()),this,SLOT(slot_TcpSocket_readyRead()));
        connect(TcpSocket,&QTcpSocket::connected,[=](){
            ui->pushButton->setText("断开连接");
            TCP_state=true;
             ui->listWidget->addItem("连接成功");
        });

    }
    else
    {
        disconnect(TcpSocket,SIGNAL(readyRead()),this,SLOT(slot_TcpSocket_readyRead()));
        delete TcpSocket;
        ui->pushButton->setText("连接");
        TCP_state=false;
         ui->listWidget->addItem("已经断开连接");
    }
}


void TCP_image::on_pushButton_3_clicked()
{
    if(display_state==false)
    {
        ui->pushButton_3->setText("关闭监控");
        display_state=true;
        ui->listWidget->addItem("监控已经打开");
    }
    else
    {
        ui->pushButton_3->setText("打开监控");
        display_state=false;
        ui->listWidget->addItem("监控已经关闭");
    }
}

void TCP_image::on_pushButton_yuyin_clicked()
{
    this->hide();
    emit enter_audio5();//进入语音识别
}

void TCP_image::on_pushButton_jiaju_clicked()
{
    this->hide();
    emit enter_home5();//进入智能家具
}

void TCP_image::on_pushButton_tianqi_clicked()
{
    this->hide();
    emit enter_weather5();//进入天气预报
}

void TCP_image::on_pushButton_yinyue_clicked()
{
    this->hide();
    emit enter_audio5();//进入语音识别
}

void TCP_image::on_pushButton_kuaile_clicked()
{
    this->hide();
    emit enter_luck_draw5();//进入快乐一天
}

void TCP_image::on_pushButton_surface_clicked()
{
    this->hide();
    emit TCP_hide5();//当前界面隐藏,主界面显示信号
}

18.weather_forecast.h  天气预报模块

#include "weather_forecast.h"
#include "ui_weather_forecast.h"

weather_forecast::weather_forecast(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::weather_forecast)
{
    ui->setupUi(this);
    http = new QNetworkAccessManager(this);//建立对象
    connect(ui->pushButton_xunze,&QPushButton::clicked,[=](){
       QString location = ui->comboBox->currentText();//获得当前序列的选中的文字
       //三天的 加上https://api.seniverse.com/v3/weather/daily.json?key=SdwOKTQhOrW7xQRvc&location=%1&language=zh-Hans&unit=c&start=0&days=3
       //一天的    https://api.seniverse.com/v3/weather/now.json?key=SdwOKTQhOrW7xQRvc&location=%1&language=zh-Hans&unit=c
       QString ask = QString("https://api.seniverse.com/v3/weather/daily.json?key=心智天气获取&location=%1&language=zh-Hans&unit=c&start=0&days=3").arg(location);
       qDebug()<<"请求网址: "<get(QNetworkRequest(QUrl(ask)));
       ui->listWidget_word1->clear();//清除
       ui->listWidget_word2->clear();//清除
       ui->listWidget_word3->clear();//清除
       ui->listWidget_city->clear();//清除
    });

    connect(http,&QNetworkAccessManager::finished,[=](QNetworkReply * reply)
    {
        get_forecast_three(reply);//获取三天的天气
    });

    emit ui->pushButton_xunze->clicked();//进入的时候自动获取第一次 数据
    set_hour_min();//开始的时候设置时间
    timer.start(30000);//1/2分钟的闹钟
    connect(&timer,SIGNAL(timeout()),this,SLOT(set_hour_min()));
}

weather_forecast::~weather_forecast()
{
    delete ui;
}

void weather_forecast::slot_surface_show()//界面显示槽函数函数
{
    this->show();//当前界面显示
}

void weather_forecast::setHide()//设置这个界面隐藏
{
    this->hide();//隐藏界面
}
void weather_forecast::setShow()//设置这个界面显示
{
    this->show();//显示这个界面
}

void weather_forecast::set_hour_min()//设置现在的时间
{
    QTime current_time =QTime::currentTime();
    int hour = current_time.hour(); //当前的小时
    int minute = current_time.minute();//当前的分钟
    ui->lcdNumber_1->display(hour);//设置小时
    ui->lcdNumber_3->display(minute);//设置分钟

}

void weather_forecast::get_forecast(QNetworkReply * reply)//获取今天的天气预报
{
    QByteArray text = reply->readAll();//读取所有的数据
    QJsonObject json = QJsonDocument::fromJson(text).object();//获取json 源码
    qDebug()<readAll();//读取所有的数据
    QJsonObject json = QJsonDocument::fromJson(text).object();//获取json 源码
    qDebug()<listWidget_city->addItem(name);//ui界面设置地点


        //获取每天的天气
        //第一天

        QString time_1 =json["results"].toArray()[0].toObject()["daily"].toArray()[0].toObject()["date"].toString();//解析 Json 的代码  获取第一天的时间
        int code_day_1=json["results"].toArray()[0].toObject()["daily"].toArray()[0].toObject()["code_day"].toString().toInt();//解析 Json 的代码  获取第一天的白天的天气的编码
        int code_night_1=json["results"].toArray()[0].toObject()["daily"].toArray()[0].toObject()["code_night"].toString().toInt();//解析 Json 的代码  获取第一天的晚上的天气的编码
        QString temp_high_1=json["results"].toArray()[0].toObject()["daily"].toArray()[0].toObject()["high"].toString();//解析 Json 的代码  获取第一天的最高温度
        QString temp_low_1=json["results"].toArray()[0].toObject()["daily"].toArray()[0].toObject()["low"].toString();//解析 Json 的代码  获取第一天的最低温度
        QString text_day_1=json["results"].toArray()[0].toObject()["daily"].toArray()[0].toObject()["text_day"].toString();//解析 Json 的代码  获取第一天的最低温度
        QString text_night_1=json["results"].toArray()[0].toObject()["daily"].toArray()[0].toObject()["text_night"].toString();//解析 Json 的代码  获取第一天的最低温度


        //第二天
        QString time_2 =json["results"].toArray()[0].toObject()["daily"].toArray()[1].toObject()["date"].toString();//解析 Json 的代码  获取第2天的时间
        int code_day_2=json["results"].toArray()[0].toObject()["daily"].toArray()[1].toObject()["code_day"].toString().toInt();//解析 Json 的代码  获取第2天的白天的天气的编码
        int code_night_2=json["results"].toArray()[0].toObject()["daily"].toArray()[1].toObject()["code_night"].toString().toInt();//解析 Json 的代码  获取第2天的晚上的天气的编码
        QString temp_high_2=json["results"].toArray()[0].toObject()["daily"].toArray()[1].toObject()["high"].toString();//解析 Json 的代码  获取第2天的最高温度
        QString temp_low_2=json["results"].toArray()[0].toObject()["daily"].toArray()[1].toObject()["low"].toString();//解析 Json 的代码  获取第2天的最低温度
        QString text_day_2=json["results"].toArray()[0].toObject()["daily"].toArray()[1].toObject()["text_day"].toString();//解析 Json 的代码  获取第2天的最低温度
        QString text_night_2=json["results"].toArray()[0].toObject()["daily"].toArray()[1].toObject()["text_night"].toString();//解析 Json 的代码  获取第2天的最低温度

        //第3天
        QString time_3 =json["results"].toArray()[0].toObject()["daily"].toArray()[2].toObject()["date"].toString();//解析 Json 的代码  获取第3天的时间
        int code_day_3=json["results"].toArray()[0].toObject()["daily"].toArray()[2].toObject()["code_day"].toString().toInt();//解析 Json 的代码  获取第3天的白天的天气的编码
        int code_night_3=json["results"].toArray()[0].toObject()["daily"].toArray()[2].toObject()["code_night"].toString().toInt();//解析 Json 的代码  获取第3天的晚上的天气的编码
        QString temp_high_3=json["results"].toArray()[0].toObject()["daily"].toArray()[2].toObject()["high"].toString();//解析 Json 的代码  获取第3天的最高温度
        QString temp_low_3=json["results"].toArray()[0].toObject()["daily"].toArray()[2].toObject()["low"].toString();//解析 Json 的代码  获取第3天的最低温度
        QString text_day_3=json["results"].toArray()[0].toObject()["daily"].toArray()[2].toObject()["text_day"].toString();//解析 Json 的代码  获取第3天的最低温度
        QString text_night_3=json["results"].toArray()[0].toObject()["daily"].toArray()[2].toObject()["text_night"].toString();//解析 Json 的代码  获取第3天的最低温度


        qDebug()<<"time= "<listWidget_word1->addItem(QString("日期: " + time_1));
        ui->listWidget_word1->addItem(QString("天气: " + text_day_1));
        ui->listWidget_word1->addItem(QString("最高温度: " + temp_high_1));
        ui->listWidget_word1->addItem(QString("最低温度: " + temp_low_1));
        set_label_1(code_day_1);



        qDebug()<<"time_2"<listWidget_word2->addItem(QString("日期: " + time_2));
        ui->listWidget_word2->addItem(QString("天气: " + text_day_2));
        ui->listWidget_word2->addItem(QString("最高温度: " + temp_high_2));
        ui->listWidget_word2->addItem(QString("最低温度: " + temp_low_2));
        set_label_2(code_day_2);

        qDebug()<<"time_3"<listWidget_word3->addItem(QString("日期: " + time_3));
        ui->listWidget_word3->addItem(QString("天气: " + text_day_3));
        ui->listWidget_word3->addItem(QString("最高温度: " + temp_high_3));
        ui->listWidget_word3->addItem(QString("最低温度: " + temp_low_3));
        set_label_3(code_day_3);




    }

}

void weather_forecast::set_label_1(int value)//设置图片
{
    if(value==0 || value==1 || value==2 || value==3)//晴天
    {
        QImage image(QString(":/res/日间天气-晴.png"));
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==4 || value==5 || value==6 ||value==7 || value==8)//多云
    {

        QImage image(QString(":/res/日间天气-多云.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==9 )//阴
    {
        QImage image(QString(":/res/日间天气-阴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));

    }
    else if(value==10)//阵雨
    {
        QImage image(QString(":/res/日间天气-阵雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==11)//雷阵雨
    {
        QImage image(QString(":/res/日间天气-雷阵雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==12)//雷阵雨伴有冰雹
    {
        QImage image(QString(":/res/日间天气-雷阵雨夹冰雹.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==13)//小雨
    {
        QImage image(QString(":/res/日间天气-小雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==14)//中雨
    {
        QImage image(QString(":/res/日间天气-中雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==15)//大雨
    {
        QImage image(QString(":/res/日间天气-大雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==16)//暴雨
    {
        QImage image(QString(":/res/日间天气-暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==17)//大暴雨
    {
        QImage image(QString(":/res/日间天气-大暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==18)//特大暴雨
    {
        QImage image(QString(":/res/日间天气-特大暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==19)//冻雨
    {
        QImage image(QString(":/res/日间天气-冻雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==20)//雨夹雪
    {
        QImage image(QString(":/res/日间天气-雨夹雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==21)//阵雪
    {
        QImage image(QString(":/res/日间天气-阵雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==22)//小雪
    {
        QImage image(QString(":/res/日间天气-小雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==23)//中雪
    {
        QImage image(QString(":/res/日间天气-中雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==24)//大雪
    {
        QImage image(QString(":/res/日间天气-大雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==25)//暴雪
    {
        QImage image(QString(":/res/日间天气-暴雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==26)//浮尘
    {
        QImage image(QString(":/res/日间天气-浮尘.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==27)//扬沙
    {
        QImage image(QString(":/res/日间天气-扬沙.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==28)//沙尘暴
    {
        QImage image(QString(":/res/日间天气-沙尘暴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==29)//强沙尘暴
    {
        QImage image(QString(":/res/日间天气-强沙尘暴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==30)//雾
    {
        QImage image(QString(":/res/日间天气-雾.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==31)//霾
    {
        QImage image(QString(":/res/雾霾.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==32)//风
    {
        QImage image(QString(":/res/风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==33)//大风
    {
        QImage image(QString(":/res/大风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==34)//飓风
    {
        QImage image(QString(":/res/飓风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==35)//热带风暴
    {
        QImage image(QString(":/res/台风 .png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==36)//龙卷风
    {
        QImage image(QString(":/res/龙卷风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==37)//冷
    {
        QImage image(QString(":/res/冷.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==38)//热
    {
        QImage image(QString(":/res/热.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian1->setPixmap(QPixmap::fromImage(image));
    }
}


void weather_forecast::set_label_2(int value)//设置图片
{
    if(value==0 || value==1 || value==2 || value==3)//晴天
    {
        QImage image(QString(":/res/日间天气-晴.png"));
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==4 || value==5 || value==6 ||value==7 || value==8)//多云
    {

        QImage image(QString(":/res/日间天气-多云.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==9 )//阴
    {
        QImage image(QString(":/res/日间天气-阴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));

    }
    else if(value==10)//阵雨
    {
        QImage image(QString(":/res/日间天气-阵雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==11)//雷阵雨
    {
        QImage image(QString(":/res/日间天气-雷阵雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==12)//雷阵雨伴有冰雹
    {
        QImage image(QString(":/res/日间天气-雷阵雨夹冰雹.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==13)//小雨
    {
        QImage image(QString(":/res/日间天气-小雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==14)//中雨
    {
        QImage image(QString(":/res/日间天气-中雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==15)//大雨
    {
        QImage image(QString(":/res/日间天气-大雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==16)//暴雨
    {
        QImage image(QString(":/res/日间天气-暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==17)//大暴雨
    {
        QImage image(QString(":/res/日间天气-大暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==18)//特大暴雨
    {
        QImage image(QString(":/res/日间天气-特大暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==19)//冻雨
    {
        QImage image(QString(":/res/日间天气-冻雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==20)//雨夹雪
    {
        QImage image(QString(":/res/日间天气-雨夹雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==21)//阵雪
    {
        QImage image(QString(":/res/日间天气-阵雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==22)//小雪
    {
        QImage image(QString(":/res/日间天气-小雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==23)//中雪
    {
        QImage image(QString(":/res/日间天气-中雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==24)//大雪
    {
        QImage image(QString(":/res/日间天气-大雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==25)//暴雪
    {
        QImage image(QString(":/res/日间天气-暴雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==26)//浮尘
    {
        QImage image(QString(":/res/日间天气-浮尘.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==27)//扬沙
    {
        QImage image(QString(":/res/日间天气-扬沙.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==28)//沙尘暴
    {
        QImage image(QString(":/res/日间天气-沙尘暴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==29)//强沙尘暴
    {
        QImage image(QString(":/res/日间天气-强沙尘暴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==30)//雾
    {
        QImage image(QString(":/res/日间天气-雾.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==31)//霾
    {
        QImage image(QString(":/res/雾霾.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==32)//风
    {
        QImage image(QString(":/res/风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==33)//大风
    {
        QImage image(QString(":/res/大风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==34)//飓风
    {
        QImage image(QString(":/res/飓风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==35)//热带风暴
    {
        QImage image(QString(":/res/台风 .png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==36)//龙卷风
    {
        QImage image(QString(":/res/龙卷风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==37)//冷
    {
        QImage image(QString(":/res/冷.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==38)//热
    {
        QImage image(QString(":/res/热.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian2->setPixmap(QPixmap::fromImage(image));
    }
}


void weather_forecast::set_label_3(int value)//设置图片
{
    if(value==0 || value==1 || value==2 || value==3)//晴天
    {
        QImage image(QString(":/res/日间天气-晴.png"));
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==4 || value==5 || value==6 ||value==7 || value==8)//多云
    {

        QImage image(QString(":/res/日间天气-多云.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==9 )//阴
    {
        QImage image(QString(":/res/日间天气-阴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));

    }
    else if(value==10)//阵雨
    {
        QImage image(QString(":/res/日间天气-阵雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==11)//雷阵雨
    {
        QImage image(QString(":/res/日间天气-雷阵雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==12)//雷阵雨伴有冰雹
    {
        QImage image(QString(":/res/日间天气-雷阵雨夹冰雹.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==13)//小雨
    {
        QImage image(QString(":/res/日间天气-小雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==14)//中雨
    {
        QImage image(QString(":/res/日间天气-中雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==15)//大雨
    {
        QImage image(QString(":/res/日间天气-大雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==16)//暴雨
    {
        QImage image(QString(":/res/日间天气-暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==17)//大暴雨
    {
        QImage image(QString(":/res/日间天气-大暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==18)//特大暴雨
    {
        QImage image(QString(":/res/日间天气-特大暴雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==19)//冻雨
    {
        QImage image(QString(":/res/日间天气-冻雨.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==20)//雨夹雪
    {
        QImage image(QString(":/res/日间天气-雨夹雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==21)//阵雪
    {
        QImage image(QString(":/res/日间天气-阵雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==22)//小雪
    {
        QImage image(QString(":/res/日间天气-小雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==23)//中雪
    {
        QImage image(QString(":/res/日间天气-中雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==24)//大雪
    {
        QImage image(QString(":/res/日间天气-大雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==25)//暴雪
    {
        QImage image(QString(":/res/日间天气-暴雪.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==26)//浮尘
    {
        QImage image(QString(":/res/日间天气-浮尘.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==27)//扬沙
    {
        QImage image(QString(":/res/日间天气-扬沙.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==28)//沙尘暴
    {
        QImage image(QString(":/res/日间天气-沙尘暴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==29)//强沙尘暴
    {
        QImage image(QString(":/res/日间天气-强沙尘暴.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==30)//雾
    {
        QImage image(QString(":/res/日间天气-雾.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==31)//霾
    {
        QImage image(QString(":/res/雾霾.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==32)//风
    {
        QImage image(QString(":/res/风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==33)//大风
    {
        QImage image(QString(":/res/大风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==34)//飓风
    {
        QImage image(QString(":/res/飓风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==35)//热带风暴
    {
        QImage image(QString(":/res/台风 .png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==36)//龙卷风
    {
        QImage image(QString(":/res/龙卷风.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==37)//冷
    {
        QImage image(QString(":/res/冷.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
    else if(value==38)//热
    {
        QImage image(QString(":/res/热.png"));//这个只有不加qrc 才有用,我不知道为啥
        ui->label_tupian3->setPixmap(QPixmap::fromImage(image));
    }
}

void weather_forecast::on_pushButton_yuyin_clicked()
{
     this->hide();
    emit enter_audio6();
}

void weather_forecast::on_pushButton_jiaju_clicked()
{
     this->hide();
    emit enter_home6();//进入智能家具
}

void weather_forecast::on_pushButton_jiankong_clicked()
{
     this->hide();
    emit enter_tcp6();//进入远程监控

}

void weather_forecast::on_pushButton_yinyue_clicked()
{
     this->hide();
    emit enter_music6();//进入语音识别
}

void weather_forecast::on_pushButton_kuaile_clicked()
{
     this->hide();
    emit enter_luck_draw6();//进入快乐一天

}

void weather_forecast::on_pushButton_surface_clicked()
{

    this->hide();
    emit weather_hide6();//激发信号 返回主界面
}

19. widget .h  主界面类

#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    /*** 实列化对象***/
    audio = new Audio;
    luck = new luck_draw;
    music = new Misic_display;
    weather = new weather_forecast;
    home= new start_home;
    tcp = new TCP_image;


    /*** 建立返回主界面的信号连接 ***/
    connect(audio,SIGNAL(audio_hide1()),this,SLOT(slot_widge_show()));//返回信号
    connect(luck,SIGNAL(luck_hide2()),this,SLOT(slot_widge_show()));//返回信号
    connect(music,SIGNAL(music_hide3()),this,SLOT(slot_widge_show()));//返回信号
    connect(weather,SIGNAL(weather_hide6()),this,SLOT(slot_widge_show()));//返回信号
    connect(home,SIGNAL(home_hide4()),this,SLOT(slot_widge_show()));//返回信号
    connect(tcp,SIGNAL(TCP_hide5()),this,SLOT(slot_widge_show()));//返回信号


    connect(weather,SIGNAL(enter_audio6()),this,SLOT(on_pushButton_6_clicked()));
    connect(weather,SIGNAL(enter_home6()),this,SLOT(on_pushButton_5_clicked()));
    connect(weather,SIGNAL(enter_tcp6()),this,SLOT(on_pushButton_4_clicked()));
    connect(weather,SIGNAL(enter_luck_draw6()),this,SLOT(on_pushButton_3_clicked()));
    connect(weather,SIGNAL(enter_music6()),this,SLOT(on_pushButton_2_clicked()));

    //connect(audio,SIGNAL(enter_audio1()),this,SLOT(on_pushButton_6_clicked()));
    connect(audio,SIGNAL(enter_home1()),this,SLOT(on_pushButton_5_clicked()));
    connect(audio,SIGNAL(enter_tcp1()),this,SLOT(on_pushButton_4_clicked()));
    connect(audio,SIGNAL(enter_luck_draw1()),this,SLOT(on_pushButton_3_clicked()));
    connect(audio,SIGNAL(enter_music1()),this,SLOT(on_pushButton_2_clicked()));
    connect(audio,SIGNAL(enter_weather1()),this,SLOT(on_pushButton_clicked()));

    connect(luck,SIGNAL(enter_audio2()),this,SLOT(on_pushButton_6_clicked()));
    connect(luck,SIGNAL(enter_home2()),this,SLOT(on_pushButton_5_clicked()));
    connect(luck,SIGNAL(enter_tcp2()),this,SLOT(on_pushButton_4_clicked()));
    //connect(audio,SIGNAL(enter_luck_draw1()),this,SLOT(on_pushButton_3_clicked()));
    connect(luck,SIGNAL(enter_music2()),this,SLOT(on_pushButton_2_clicked()));
    connect(luck,SIGNAL(enter_weather2()),this,SLOT(on_pushButton_clicked()));

    connect(music,SIGNAL(enter_audio3()),this,SLOT(on_pushButton_6_clicked()));
    connect(music,SIGNAL(enter_home3()),this,SLOT(on_pushButton_5_clicked()));
    connect(music,SIGNAL(enter_tcp3()),this,SLOT(on_pushButton_4_clicked()));
    connect(music,SIGNAL(enter_luck_draw3()),this,SLOT(on_pushButton_3_clicked()));
    //connect(music,SIGNAL(enter_music3()),this,SLOT(on_pushButton_2_clicked()));
    connect(music,SIGNAL(enter_weather3()),this,SLOT(on_pushButton_clicked()));


    connect(home,SIGNAL(enter_audio4()),this,SLOT(on_pushButton_6_clicked()));
    //connect(home,SIGNAL(enter_home4()),this,SLOT(on_pushButton_5_clicked()));
    connect(home,SIGNAL(enter_tcp4()),this,SLOT(on_pushButton_4_clicked()));
    connect(home,SIGNAL(enter_luck_draw4()),this,SLOT(on_pushButton_3_clicked()));
    connect(home,SIGNAL(enter_music4()),this,SLOT(on_pushButton_2_clicked()));
    connect(home,SIGNAL(enter_weather4()),this,SLOT(on_pushButton_clicked()));


    connect(tcp,SIGNAL(enter_audio5()),this,SLOT(on_pushButton_6_clicked()));
    connect(tcp,SIGNAL(enter_home5()),this,SLOT(on_pushButton_5_clicked()));
    connect(tcp,SIGNAL(enter_tcp5()),this,SLOT(on_pushButton_4_clicked()));
    connect(tcp,SIGNAL(enter_luck_draw5()),this,SLOT(on_pushButton_3_clicked()));
    connect(tcp,SIGNAL(enter_music5()),this,SLOT(on_pushButton_2_clicked()));
    connect(tcp,SIGNAL(enter_weather5()),this,SLOT(on_pushButton_clicked()));


    //语音控制 智能家具装置
    connect(audio,SIGNAL(control_home(int)),home,SLOT(receive_number(int)));

    //语音控制 音乐
    connect(audio,SIGNAL(control_music_open()),music,SLOT(on_pushButton_3_clicked()));
    connect(audio,SIGNAL(control_music_close()),music,SLOT(on_pushButton_4_clicked()));
    connect(audio,SIGNAL(control_shangyishou()),music,SLOT(on_pushButton_2_clicked()));
    connect(audio,SIGNAL(control_xiayishou()),music,SLOT(on_pushButton_5_clicked()));


}

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


void Widget::slot_widge_show()//主界面显示函数
{
    this->show();// 显示主界面
}


void Widget::on_pushButton_3_clicked()//开心一天
{
    this->hide();//主界面隐藏
    luck->show();//显示 快乐一天

}

void Widget::on_pushButton_clicked()//天气预报
{
    this->hide();//主界面隐藏
    weather->show();//显示天气预报界面
}

void Widget::on_pushButton_2_clicked()//音乐播放
{
    this->hide();//主界面隐藏
    music->show();//显示播放界面
}

void Widget::on_pushButton_4_clicked()//监控
{
    this->hide();//主界面隐藏
    tcp->show();//显示远程监控界面
}

void Widget::on_pushButton_5_clicked()//家具控制
{
    this->hide();//主界面隐藏
    home->show();//显示家具控制界面

}

void Widget::on_pushButton_6_clicked()//小刘同学
{
    this->hide();//主界面隐藏
    audio->show();//显示语音识别的界面
    if(kkkk==0)
    {
        audio->bofang_liu();
        kkkk=1;
    }
}

void Widget::on_pushButton_7_clicked()//显示游戏
{
    www = new Mainsence;
    www->show();
}


void Widget::on_pushButton_2048_clicked()
{
    kkk=new MainWindow;
    kkk->show();
}

20.mian.cpp  

#include "widget.h"
#include 
#include "sign_in.h"
#include "weather_forecast.h"
#include "misic_display.h"
#include "luck_draw.h"
#include "camera.h"
#include "start_home.h"
#include "tcp_image.h"
#include "audio.h"
#include "entry_mode.h"
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

//    Mainsence w;//游戏界面
//    w.show();

    Entry_mode w;//选择登陆模式
    w.show();

    //Audio w;//语音识别
    //w.show();

    //TCP_image w;//视屏监控
    //w.show();

    //start_home w;//智能家居
    //w.show();

    //Sign_in w;//登录界面
    //w.show();

    //weather_forecast w;//天气预报
    //w.show();

    //Misic_display w;//音乐播放
    //w.show();

    //luck_draw w;//快了一天
    //w.show();

    //Camera w;//人脸识别
    //w.show();

    //Widget w;//主界面
    //w.show();


    //MainWindow w;//游戏2048
    //w.show();

    return a.exec();
}



ui 界面 

audio.ui



 Audio
 
  
   
    0
    0
    800
    760
   
  
  
   
    800
    760
   
  
  
   
    800
    760
   
  
  
   Audio
  
  
   
    
     0
     10
     801
     781
    
   
   
    
     
      20
      180
      661
      71
     
    
    
     文字转语音
    
    
     
      
     
     
      
       
        转换
       
      
     
    
   
   
    
     
      20
      130
      661
      31
     
    
    
     
      
       
        开始录制
       
      
     
     
      
       
        播放音频
       
      
     
     
      
       
        识别音频
       
      
     
     
      
     
    
   
   
    
     
      30
      270
      611
      421
     
    
   
   
    
     
      10
      10
      371
      91
     
    
    
     系统可用设备表
    
    
     
      
       
        
         
          输入设备
         
        
       
       
        
       
      
     
     
      
       
        
         
          输出设备
         
        
       
       
        
       
      
     
    
   
   
    
     
      660
      530
      141
      211
     
    
    
     界面切换
    
    
     
      
       
        天气预报界面
       
      
     
     
      
       
        智能家具界面
       
      
     
     
      
       
        远程监控界面
       
      
     
     
      
       
        音乐播放界面
       
      
     
     
      
       
        快乐一下界面
       
      
     
     
      
       
        返回主界面
       
      
     
    
   
   
    
     
      0
      -50
      811
      801
     
    
    
     background-image: url(:/image/image/11.webp);
    
    
     
    
   
   label_5
   groupBox_2
   layoutWidget
   textEdit_JSON
   groupBox
   groupBox_3
  
 
 
 

camera.ui



 Camera
 
  
   
    0
    0
    800
    760
   
  
  
   
    800
    760
   
  
  
   
    800
    760
   
  
  
   Camera
  
  
   
    
     
      40
      150
      372
      310
     
    
    
     
      372
      310
     
    
    
     
      372
      310
     
    
   
   
    
     false
    
    
     
      320
      470
      93
      28
     
    
    
     拍照
    
   
   
    
     
      450
      160
      261
      251
     
    
    
     照片
    
    
     true
    
    
     Qt::AlignCenter
    
   
   
    
     
      40
      470
      273
      30
     
    
    
     
      
       
        
         
          摄像头列表
         
        
       
       
        
       
      
     
     
      
       
        打开摄像头
       
      
     
    
   
   
    
     
      30
      540
      351
      131
     
    
    
     注册信息填写
    
    
     
      
       
        
         
          分组:
         
        
       
       
        
         
          
           Student
          
         
         
          
           Teacher
          
         
        
       
       
        
         
          Qt::Horizontal
         
         
          
           40
           20
          
         
        
       
      
     
     
      
       
        
         
          用户id
         
        
       
       
        
         
          输入数字_字母或下划线
         
        
       
      
     
     
      
       
        
         
          姓名:
         
        
       
       
        
       
      
     
    
   
   
    
     
      400
      540
      321
      131
     
    
    
     功能按钮
    
    
     
      
       20
       20
       93
       28
      
     
     
      注册
     
    
    
     
      
       120
       20
       93
       28
      
     
     
      登录
     
    
   
  
  
   
    
     0
     0
     800
     26
    
   
  
  
 
 
  
   QVideoWidget
   QWidget
   
qvideowidget.h
1

entry_mode.ui



 Entry_mode
 
  
   
    0
    0
    491
    343
   
  
  
   
    0
    0
   
  
  
   
    500
    378
   
  
  
   Form
  
  
   
    
     60
     50
     371
     261
    
   
   
    
     
      190
      170
      131
      51
     
    
    
     账号登录
    
   
   
    
     
      20
      170
      131
      51
     
    
    
     人脸识别登录
    
   
   
    
     
      50
      30
      251
      71
     
    
    
     
      23
      75
      true
     
    
    
     进入方式选择
    
   
  
  
   
    
     1
     4
     491
     341
    
   
   
    background-image: url(:/image/image/22.webp);
   
   
    
   
  
  label_2
  widget
 
 
 



luck_draw.ui



 luck_draw
 
  
   
    0
    0
    800
    760
   
  
  
   
    800
    760
   
  
  
   
    800
    760
   
  
  
   Form
  
  
   
    
     0
     0
     671
     71
    
   
   
    background:transparent

   
   
    
     奖励
    
   
   
    
     一等奖
    
   
   
    
     二等奖
    
   
   
    
     三等奖
    
   
   
    
     幸运奖
    
   
   
    
     谢谢参与
    
   
   
    
     自助走起
    
   
   
    
     游戏时间
    
   
   
    
     零食很忙
    
   
   
    
     睡一下午
    
   
   
    
     搞学习
    
   
  
  
   
    
     660
     540
     141
     211
    
   
   
    界面切换
   
   
    
     
      
       天气预报界面
      
     
    
    
     
      
       智能家居界面
      
     
    
    
     
      
       远程监控界面
      
     
    
    
     
      
       音乐播放界面
      
     
    
    
     
      
       语音识别界面
      
     
    
    
     
      
       返回主界面
      
     
    
   
  
 
 
 



mainsence.ui



 Mainsence
 
  
   
    0
    0
    400
    300
   
  
  
   Mainsence
  
  
  
   
    
     0
     0
     400
     26
    
   
   
    
     开始
    
    
   
   
  
  
   
    TopToolBarArea
   
   
    false
   
  
  
  
   
    退出
   
  
 
 
 
 



mainwinddow.ui



 MainWindow
 
  
   
    0
    0
    421
    324
   
  
  
   MainWindow
  
  
   
    
     
      20
      138
      181
      121
     
    
    
     
      微软雅黑
      26
     
    
    
     0秒
    
   
   
    
     
      220
      140
      191
      121
     
    
    
     
      微软雅黑
      26
     
    
    
     0分
    
   
   
    
     
      0
      0
      201
      131
     
    
    
     
      微软雅黑
      14
      75
      true
     
    
    
     Classic
    
   
  
  
   
    
     0
     0
     421
     26
    
   
   
    
     Game Mode
    
    
    
    
    
    
    
   
   
    
     Score
    
    
   
   
    
     Help
    
    
   
   
   
   
  
  
  
   
    Classic
   
  
  
   
    1min
   
  
  
   
    123
   
  
  
   
    Time Limited
   
  
  
   
    Score
   
  
  
   
    Help
   
  
  
   
    Drunk Mode
   
  
  
   
    8402
   
  
  
   
    Challenge
   
  
  
   
    Max Number
   
  
  
   
    Number LImited
   
  
  
   
    Fast Mode
   
  
 
 
 
 


misic_disolay.ui



 Misic_display
 
  
   
    0
    0
    800
    760
   
  
  
   
    800
    760
   
  
  
   
    800
    760
   
  
  
   音乐播放器
  
  
   *{
border:none;
	
}


QPushButton:hover 
{
 
	
	
	;
	background-color: rgb(255, 10, 83);
 }

  
  
   
    
     10
     0
     591
     751
    
   
   
    
     
      502
      574
      91
      31
     
    
    
     
      顺序播放
     
    
    
     
      列表循环
     
    
    
     
      单曲循环
     
    
   
   
    
     
      10
      509
      411
      37
     
    
    
     
      
       
        
         75
         true
        
       
       
        00:00
       
      
     
     
      
       
        Qt::Horizontal
       
       
        
         40
         20
        
       
      
     
     
      
       
        
         75
         true
        
       
       
        00:00
       
      
     
    
   
   
    
     
      0
      580
      501
      128
     
    
    
     
      0
      64
     
    
    
     
      16777215
      128
     
    
    
     
    
    
     
      
       
        
         64
         64
        
       
       
        
         64
         64
        
       
       
        
background-image: url(:/image/image/添加.png);
       
       
        
       
      
     
     
      
       
        
         64
         64
        
       
       
        
         64
         64
        
       
       
        background-image: url(:/image/image/快退 上一个.png);
       
       
        
       
      
     
     
      
       
        
         64
         64
        
       
       
        
         64
         64
        
       
       
        background-image: url(:/image/image/视频-开始-播放.png);
       
       
        
       
      
     
     
      
       
        
         64
         64
        
       
       
        
         64
         64
        
       
       
        background-image: url(:/image/image/暂停播放.png);
       
       
        
       
      
     
     
      
       
        
         64
         64
        
       
       
        
         64
         64
        
       
       
        background-image: url(:/image/image/快进.png);
       
       
        
       
      
     
    
   
   
    
     
      0
      0
      501
      491
     
    
    
     background:transparent

    
   
   
    
     
      510
      360
      22
      160
     
    
    
     Qt::Vertical
    
   
   
    
     
      0
      560
      421
      22
     
    
    
     Qt::Horizontal
    
   
   
    
     
      502
      556
      64
      16
     
    
    
     
      75
      true
     
    
    
     播放模式
    
   
   
    
     
      470
      520
      123
      22
     
    
    
     
      
       
        
         9
         75
         true
        
       
       
        音量
       
      
     
     
      
       
        
         8
         75
         true
        
       
       
        50
       
      
     
    
   
   
    
     
      500
      620
      72
      15
     
    
    
     
      75
      true
     
    
    
     倍速
    
    
     Qt::AlignCenter
    
   
   
    
     
      500
      640
      87
      22
     
    
    
     
      1
     
    
    
     
      2
     
    
    
     
      3
     
    
    
     
      4
     
    
   
   layoutWidget
   comboBox
   widget_2
   widget
   listWidget
   verticalSlider
   horizontalSlider
   label_5
   label_2
   comboBox_2
  
  
   
    
     1
     4
     791
     751
    
   
   
    background-image: url(:/image/image/动漫美女.jpeg);
   
   
    
   
  
  
   
    
     650
     540
     141
     211
    
   
   
    界面切换
   
   
    
     
      
       语音识别界面
      
     
    
    
     
      
       智能家具界面
      
     
    
    
     
      
       远程监控界面
      
     
    
    
     
      
       天气预报界面
      
     
    
    
     
      
       快乐一下界面
      
     
    
    
     
      
       返回主界面
      
     
    
   
  
  label
  widget_3
  groupBox_3
 
 
 



register.ui



 Register
 
  
   
    0
    0
    640
    360
   
  
  
   
    640
    360
   
  
  
   
    640
    360
   
  
  
   
    微软雅黑
    12
    50
    false
   
  
  
   注册界面
  
  
   
    
     100
     30
     421
     321
    
   
   
    
     
      60
      0
      301
      61
     
    
    
     
      20
      75
      true
     
    
    
     注册界面
    
    
     Qt::AlignCenter
    
   
   
    
     
      70
      60
      301
      241
     
    
    
     
      
       
        
         
          
           75
           true
          
         
         
          账号
         
        
       
       
        
         
          请输入账号
         
        
       
      
     
     
      
       
        
         
          
           75
           true
          
         
         
          密码
         
        
       
       
        
         
          请输入密码
         
        
       
      
     
     
      
       
        
         
          
           75
           true
          
         
         
          性别
         
        
       
       
        
         
          
           75
           true
          
         
         
          
         
        
       
       
        
         
          
           75
           true
          
         
         
          
         
        
       
      
     
     
      
       
        
         
          
           75
           true
          
         
         
          年龄
         
        
       
       
        
       
      
     
     
      
       
        
         75
         true
        
       
       
        注册
       
      
     
    
   
  
  
   
    
     1
     4
     641
     351
    
   
   
    background-image: url(:/res/regsiter.png);
   
   
    
   
  
  label_6
  widget
 
 
 



sign_in.ui



 Sign_in
 
  
   
    0
    0
    640
    360
   
  
  
   
    640
    360
   
  
  
   
    640
    360
   
  
  
   
    微软雅黑
    12
    50
    false
   
  
  
   登陆界面
  
  
   
    
     130
     10
     341
     321
    
   
   
    
     
      40
      40
      281
      61
     
    
    
     
      16
      75
      true
     
    
    
     智能家居系统
    
    
     Qt::AlignCenter
    
   
   
    
     
      40
      120
      281
      191
     
    
    
     
      
       
        
         
          账号
         
        
       
       
        
       
      
     
     
      
       
        
         
          密码
         
        
       
       
        
       
      
     
     
      
       
        显示密码
       
      
     
     
      
       
        
         
          登录
         
        
       
       
        
         
          注册
         
        
       
      
     
    
   
  
  
   
    
     0
     4
     641
     361
    
   
   
    Qt::NoContextMenu
   
   
    background-image: url(:/res/sign_in.png);
   
   
    
   
  
  label_4
  widget
 
 
 



start_home.ui



 start_home
 
  
   
    0
    0
    651
    698
   
  
  
   智能家居
  
  
   
    
     
      450
      0
      20
      471
     
    
    
     Qt::Vertical
    
   
   
    
     
      370
      10
      75
      60
     
    
    
     
      75
      60
     
    
    
     
    
    
     :/image/image/关灯.png
    
    
     true
    
   
   
    
     
      313
      0
      75
      111
     
    
    
     Qt::Vertical
    
   
   
    
     
      320
      100
      91
      20
     
    
    
     Qt::Horizontal
    
   
   
    
     
      390
      70
      31
      16
     
    
    
     厕所
    
   
   
    
     
      210
      10
      75
      60
     
    
    
     
      75
      60
     
    
    
     
      75
      60
     
    
    
     
    
    
     
    
    
     :/image/image/关灯.png
    
    
     true
    
   
   
    
     
      153
      10
      20
      101
     
    
    
     Qt::Vertical
    
   
   
    
     
      160
      100
      71
      16
     
    
    
     Qt::Horizontal
    
   
   
    
     
      260
      100
      61
      20
     
    
    
     Qt::Horizontal
    
   
   
    
     
      230
      70
      31
      16
     
    
    
     厨房
    
   
   
    
     
      0
      110
      118
      3
     
    
    
     Qt::Horizontal
    
   
   
    
     
      40
      10
      75
      60
     
    
    
     
      75
      60
     
    
    
     
    
    
     :/image/image/关灯.png
    
    
     true
    
   
   
    
     
      60
      76
      31
      20
     
    
    
     次卧
    
   
   
    
     
      10
      130
      75
      60
     
    
    
     
      75
      60
     
    
    
     
    
    
     :/image/image/关灯.png
    
    
     true
    
   
   
    
     
      0
      210
      121
      16
     
    
    
     Qt::Horizontal
    
   
   
    
     
      30
      190
      31
      16
     
    
    
     走廊
    
   
   
    
     
      0
      370
      181
      16
     
    
    
     Qt::Horizontal
    
   
   
    
     
      170
      220
      20
      161
     
    
    
     Qt::Vertical
    
   
   
    
     
      10
      250
      75
      60
     
    
    
     
      75
      60
     
    
    
     
    
    
     :/image/image/关灯.png
    
    
     true
    
   
   
    
     
      30
      310
      31
      20
     
    
    
     主卧
    
   
   
    
     
      230
      370
      231
      20
     
    
    
     Qt::Horizontal
    
   
   
    
     
      300
      250
      75
      60
     
    
    
     
      75
      60
     
    
    
     
    
    
     :/image/image/关灯.png
    
    
     true
    
   
   
    
     
      320
      310
      31
      20
     
    
    
     客厅
    
   
   
    
     
      0
      390
      75
      60
     
    
    
     
      75
      60
     
    
    
     
    
    
     :/image/image/关灯.png
    
    
     true
    
   
   
    
     
      80
      410
      31
      20
     
    
    
     阳台
    
   
   
    
     
      460
      0
      153
      283
     
    
    
     灯开关
    
    
     
      
       
        
         
          
           
            客厅
           
          
         
         
          
           
            
           
           
            
           
          
         
        
       
       
        
         
          
           
            主卧
           
          
         
         
          
           
            
           
           
            
           
          
         
        
       
       
        
         
          
           
            次卧
           
          
         
         
          
           
            
           
           
            
           
          
         
        
       
       
        
         
          
           
            厨房
           
          
         
         
          
           
            
           
           
            
           
          
         
        
       
       
        
         
          
           
            厕所
           
          
         
         
          
           
            
           
           
            
           
          
         
        
       
       
        
         
          
           
            走廊
           
          
         
         
          
           
            
           
           
            
           
          
         
        
       
       
        
         
          
           
            阳台
           
          
         
         
          
           
            
           
           
            
           
          
         
        
       
      
     
    
   
   
    
     
      10
      470
      451
      16
     
    
    
     Qt::Horizontal
    
   
   
    
     
      10
      520
      252
      23
     
    
    
     
      
       
        prot  
       
      
     
     
      
     
    
   
   
    
     
      270
      510
      93
      28
     
    
    
     连接
    
   
   
    
     
      10
      490
      252
      23
     
    
    
     
      
       
        ip地址
       
      
     
     
      
     
    
   
   
    
     
      510
      440
      141
      211
     
    
    
     界面切换
    
    
     
      
       
        语音识别界面
       
      
     
     
      
       
        天气预报界面
       
      
     
     
      
       
        远程监控界面
       
      
     
     
      
       
        音乐播放界面
       
      
     
     
      
       
        快乐一下界面
       
      
     
     
      
       
        返回主界面
       
      
     
    
   
  
  
   
    
     0
     0
     651
     26
    
   
  
  
 
 
  
 
 


tcp_image.ui



 TCP_image
 
  
   
    0
    0
    800
    760
   
  
  
   
    800
    760
   
  
  
   
    800
    760
   
  
  
   Form
  
  
   
    
     0
     0
     441
     261
    
   
   
    监控播放窗口
   
   
    
     
      0
      20
      431
      231
     
    
    
     
    
    
     true
    
   
  
  
   
    
     450
     10
     93
     28
    
   
   
    打开监控
   
  
  
   
    
     0
     270
     431
     121
    
   
  
  
   
    
     0
     400
     230
     55
    
   
   
    
     
      
       
        
         IP地址
        
       
      
      
       
      
     
    
    
     
      
       
        
         true
        
        
         prot  
        
       
      
      
       
      
     
    
   
  
  
   
    
     240
     400
     93
     28
    
   
   
    连接
   
  
  
   
    
     660
     550
     141
     211
    
   
   
    界面切换
   
   
    
     
      
       语音识别界面
      
     
    
    
     
      
       智能家具界面
      
     
    
    
     
      
       天气预报界面
      
     
    
    
     
      
       音乐播放界面
      
     
    
    
     
      
       快乐一下界面
      
     
    
    
     
      
       返回主界面
      
     
    
   
  
 
 
 



weather forecast.ui
 



 weather_forecast
 
  
   
    0
    0
    800
    760
   
  
  
   
    800
    760
   
  
  
   
    800
    760
   
  
  
   天气预报界面
  
  
   QPushButton:hover 
{
	background-color: rgb(0, 255, 0);
 }

  
  
   
    
     -70
     0
     881
     721
    
   
   
    
     
      400
      70
      321
      81
     
    
    
     
      
       
        
         12
         75
         true
        
       
       
        现在时间:
       
      
     
     
      
     
     
      
       
        
         30
         0
        
       
       
        
         30
         16777215
        
       
       
        
         20
         75
         true
        
       
       
        
       
       
        Qt::AlignCenter
       
      
     
     
      
     
    
   
   
    
     
      510
      270
      214
      447
     
    
    
     
      
       
        
         微软雅黑
         12
         75
         true
        
       
       
        后天天气
       
       
        Qt::AlignCenter
       
      
     
     
      
       
        
         
          
           210
           210
          
         
         
          
           210
           210
          
         
         
          3
         
        
       
       
        
         
          background:transparent

         
        
       
      
     
    
   
   
    
     
      80
      270
      214
      447
     
    
    
     
      
       
        
         微软雅黑
         12
         75
         true
        
       
       
        今天天气
       
       
        Qt::AlignCenter
       
      
     
     
      
       
        
         
          
           210
           210
          
         
         
          
           210
           210
          
         
         
          1
         
        
       
       
        
         
          background:transparent

         
        
       
      
     
    
   
   
    
     
      730
      270
      95
      131
     
    
    
     
      
       
        
         12
         75
         true
        
       
       
        选择城市
       
      
     
     
      
       
        
         长沙
        
       
       
        
         北京
        
       
      
     
     
      
       
        确定
       
      
     
    
   
   
    
     
      290
      270
      214
      447
     
    
    
     
      
       
        
         微软雅黑
         12
         75
         true
        
       
       
        明天天气
       
       
        Qt::AlignCenter
       
      
     
     
      
       
        
         
          
           210
           210
          
         
         
          
           210
           210
          
         
         
          2
         
        
       
       
        
         
          background:transparent

         
        
       
      
     
    
   
   
    
     
      400
      160
      321
      91
     
    
    
     
      
       
        
         12
         75
         true
        
       
       
        定位的城市
       
      
     
     
      
       
        background:transparent

       
      
     
    
   
   
    
     
      80
      10
      321
      251
     
    
   
   
    
     
      730
      510
      141
      211
     
    
    
     界面切换
    
    
     
      
       
        语音识别界面
       
      
     
     
      
       
        智能家具界面
       
      
     
     
      
       
        远程监控界面
       
      
     
     
      
       
        音乐播放界面
       
      
     
     
      
       
        快乐一下界面
       
      
     
     
      
       
        返回主界面
       
      
     
    
   
   layoutWidget
   layoutWidget
   layoutWidget
   layoutWidget
   layoutWidget
   layoutWidget_2
   calendarWidget
   groupBox_
  
  
   
    
     0
     0
     801
     761
    
   
   
    background-image: url(:/res/天气背景.jpeg);
   
   
    
   
  
  label
  widget
 
 
 




widget.ui



 Widget
 
  
   
    0
    0
    800
    760
   
  
  
   
    800
    760
   
  
  
   
    800
    760
   
  
  
   Widget
  
  
   
    
     20
     0
     761
     221
    
   
   
    应用界面
   
   
    
     
      
       天气预报
      
     
    
    
     
      
       音乐播放
      
     
    
    
     
      
       开心一天
      
     
    
    
     
      
       监控模式
      
     
    
    
     
      
       家具控制
      
     
    
    
     
      
       小刘同学
      
     
    
   
  
  
   
    
     20
     240
     771
     121
    
   
   
    游戏界面
   
   
    
     
      20
      20
      111
      41
     
    
    
     翻金币
    
   
   
    
     
      160
      20
      111
      41
     
    
    
     2048
    
   
  
  
   
    
     0
     0
     791
     751
    
   
   
    background-image: url(:/image/image/33.webp);
   
   
    
   
  
  label
  groupBox
  groupBox_2
 
 
 
 

图片资源在  资源里面



遇到的问题:

1. 如何使 最后的 Qwidget 图片显示 背景图片, 

答:没有找到结果,但是找到了一种方法代码,利用标签 存放图片,在ui 界面设计的时候,设置这个与最后界面一样大的 label  存放一种背景图片, 设置放在最后面,这样可以代替最后的widget 设置被那个图片, 查了很多资料也没有查到,在最后的图片显示的问题怎么解决,这个是一个遗憾,主要是widget 设置了 图片,他会把之前的其他控件 遮住!!

2. 关于设置 登录界面的时候,我把登录界面,注册界面写成了一个 设计师的类, 还把数据库 sqlite3 的加入数据,寻找数据, 返回数据,写成了一个类,但是最后的时候不知道怎么在,这注册类,和登录类  这两个里面同时使用 数据库的类。

答: 解决的办法,我在登录类的私有成员加入了  一个指针类型的 注册类, 在登录类的构造函数的时候,为注册类实列化对象, 在注册类里面的私有成员里面 加入了, 一个数据库的句柄,共有函数的里面写了一个返回数据库句柄的函数 

QSqlDatabase* getQsqlDatabase();//获取数据库的句柄

他返回的是    句柄的指针 ,所以我们可以,登陆界面获取句柄。 在登录界面采用,生成数据库的对象,采用 数据库对象的函数,查询数据。

3. 错误的继承 QThread 使用 线程 run 函数  (无解)

4.关于 视屏监控 模式下的  数据过大的粘包与 分包,

答:  因为开始的时候,我没有使用 opencv 来建立函数库传输视频数据, 我才用的之间在文件里面打开  每秒 50 张图片的数据, 之间采用 TCP 的方法来实现数据传输。开始的时候因为数据过大,图片数据传输不过去,之后我才用 图片的平移缩小,之后再 牺牲图片的清晰度的方法来压缩图片的大小,再传输,可以实现一部分的视屏功能,视屏只有图片的上面的一部分可以,显示,图片的下面的一部分,有时清晰,有时候模糊,这个是因为数据的分包和粘包,形成的,之后采用 一种方法:

首先第一个部分 是 这个数据的 头数据,代表着这个数据的开始传输的部分,

第二个部分是 数据的大小部分,利用sizeof  函数测出 文件里面 需要传输的数据大小。

第三个部分 是 数据, 

这样做的好处是可以防止数据的粘包和分包, 也可传输大型的数据,图片就不需要压缩了。

之后我发现传输的数据,只可以是图片类型, 这时候我才用了 JSON 的数据模式, 服务器采用JSON 的封包 , 客户端采用JSON 的解析模式, 我改的只是 传输的数据的类型,之前那个数据传输的是      QByteArray ((( 可以用来存储原始字节(包含'\0')和传统8位'\0'结尾字符串(也就是const char *);)))类型的数据, 之后 QByteArray 类型的数据转变为 JSON 类型的数据传输,我到了客户端的时候可以 准确的识别出 JSON 传输的数据类型, 因为JSON 是一个键值对!!

5.关于语音播放器 时候出现的问题  就是我的音乐播放器已经加载的资源文件,它的总时长为 0的问题,

答: 我上网查询的结果,他说资源文件改变了歌曲的数据,它使用二进制的方法保存的,

6. 关于 继承的时候 同时继承 QWidget  和 QThread   两个类时候出现的 connect 引用不准确的错误,

答: 因为他们同时引用了 QObiect 这个类

7. 关于ui 界面 设计  有控件, 但是再代码里面也写了  重写绘画事件的函数, 他就会出现两个 ui->setupUi(this); 的代码,可能会导致,你的ui 设置界面的按键不能使用.

8.关于自我知识 不足的补充,  就是 QURL 的类型, 它可以存储超链接, 超链接包括 本地文件的连接,也包括 http 的超链接, 哎,  

9.关于 使用写  智能家居  错误的TCP 传输数据的方法,导致 客服端无法识别的数据,服务器 就是直接传输数字, 之后再客户端读取的时候,发现数字都在一起形成了一个字符串,而不是单个的数字, 只能采用暴力解析的方法来实现特定的功能, 这个案例教会我们要采用 JSON 传输数据。。


2.项目的写作思路, 

1. 首先把每个功能写成一个 类 。主要是防止ui 设计界面过多的控件,不好识别,而且类好调用。

思路图:

QT 项目 智能家居系统 上位机_第2张图片

   

 

你可能感兴趣的:(个人项目专栏,智能家居)