2024-11-25 17:15:44 +08:00

293 lines
7.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef GAMEDISPLAYPAGE_H
#define GAMEDISPLAYPAGE_H
#include <QWidget>
#include <QLabel>
#include <QTimer>
#include "dataformate.h"
#include "dbforrmate.h"
#include "spasmtipsdialog.h"
#include <QUdpSocket>
#include "trainreport.h"
#include "quitgamedialog.h"
#include "emergencystopdialog.h"
#include "trainreporttwotwo.h"
#include "trainreportthreetwo.h"
#include "trainreporttwothree.h"
#include "sounddialog.h"
#include "quitbyspeeddialog.h"
class QPropertyAnimation;
namespace Ui {
class GameDisplayPage;
}
class GameDisplayPage : public QWidget
{
Q_OBJECT
public:
explicit GameDisplayPage(QWidget *parent = nullptr);
~GameDisplayPage();
//设置当前用户
void setUser(const ST_PatientMsg&);
//表头显示
void setTitle();
/****设置训练部位****
* 参数@int type 0-上肢 1-下肢 2-上下肢
* ***/
void setTrainPart(int type);
//根据参数填充实时数据
void setSlaveParam(ST_DeviceParam& st_deviceParam);
//根据界面的参数设置模式
void setTrainMode(int8_t mode);
//设置主被动切换的模式(实时填充)
void setActivePassiveSwitchMode(int8_t mode);
//在未开始游戏,处理急停状态
void getEmergecyState(ST_DeviceParam& st_deviceParam);
/****填充设置参数***
*参数@int direction 0-正向 1-反向
****/
void fillSetParam(int updown,int speed,int resistance,int direction);
//设置脉搏血氧
void setPulseOxygen(const ST_PulseOxygen&);
//设置中部参数
void setCenterParam(int left,int right,int length);
/***********通信相关************/
/*****设置速度***
* 参数@int speed 速度大小
* @qint8 type 上下肢类型 0-被动转速 1-等速转速
* ******/
void setTrainSpeed(int speed = 1,qint8 type = 0);
/******设置阻力****
* 参数@int force 阻力大小
* @qint8 type 上下肢类型 0-上肢 1-下肢
* ********/
void setTrainFore(int force,qint8 type = 0);
/******设置方向****
* 参数@qint8 direction 方向 1-顺时针 0-逆时针
* @qint8 type 上下肢类型 0-上肢 1-下肢
* ********/
void setTrainDirection(qint8 direction = 1,qint8 type = 1);
/******设置Fes开关****
* 参数@qint8 channel 方向 0-电刺激A 1-电刺激B
* @bool ok 上下肢类型 false-关 true-开
* ********/
void switchFes(qint8 channel,bool ok);
void initGameSocket();
//设置速度使能状态
void setSpeedState(bool);
//设置阻力使能状态
void setForceState(bool);
//连续按住改变速度
void pressedAdjustSpeed();
//连续按住阻力
void pressAdjustForce();
//设置方向是能
void setDirectionState(bool);
protected:
void paintEvent(QPaintEvent *event);
void showEvent(QShowEvent *event);
virtual void changeEvent(QEvent* event);
private slots:
void on_start_Btn_clicked();
void open_Btn_clicked();
void close_Btn_clicked();
void on_upSpeedMinus_Btn_clicked();
void on_upSpeedPlus_Btn_clicked();
void on_upForceMinus_Btn_clicked();
void on_upForcePlus_Btn_clicked();
void on_forward_Btn_clicked();
void on_backward_Btn_clicked();
void on_stop_Btn_clicked();
void on_pause_Btn_clicked();
void on_switchAFes_Btn_clicked();
//填充电刺激参数
void slotSetChannelAData(int *data,int size);
void slotSetChannelBData(int *data,int size);
//踏车设置参数
void slotSetBicycleParam(ST_BicycleParam st_setBicycleParam);
//接收下位机数据
void slotReceiveData(QByteArray);
void slotHeartTimer();
void slotCountDownTimer();
void slotStopTraining();
//游戏数据接收
void slotReceiveGameData();
void slotBackClicked();
void on_switchFes_Btn_clicked();
void on_sound_Button_clicked();
void on_upSpeedPlus_Btn_pressed();
void on_upSpeedMinus_Btn_pressed();
void on_upSpeedPlus_Btn_released();
void on_upSpeedMinus_Btn_released();
void on_upForcePlus_Btn_pressed();
void on_upForceMinus_Btn_pressed();
void on_upForcePlus_Btn_released();
void on_upForceMinus_Btn_released();
void slotSpeedDialogClosed();
//模拟数据
void slotSimulateData();
signals:
/******游戏状态*****
*@int8_t state 1-开始 0-关闭
***/
void signalGameStateChanged(int8_t state);
private:
//解析游戏数据
void parseGameMsg(QByteArray jsonArray);
//给游戏发送实时数据
void sendGameControlParam(ST_GameControlParam);
//停止游戏指令
void sendStopCmd();
//开始游戏
void startGameCmd();
//暂停游戏
void pauseGameCmd();
void sendStopCmdThreeTimes();
//计算结果数据
void calculateResultData();
void initButton();
//退出训练
void quitTrain();
//模式提示
void changeModeTips(QString str);
//根据模式切换按钮状态
void switchButtonState(int8_t);
void setbackBtVisible(bool isShow);
//给电刺激发送实时参数
void sendRealTimeFesParam(ST_FESRealTimeParam);
void testTipsDialog();
protected:
virtual void mouseDoubleClickEvent(QMouseEvent *event);
private:
Ui::GameDisplayPage *ui;
QPropertyAnimation *m_leftAnimation,*m_rightAnimation;
bool m_openState;
QList<QLabel*> m_channelAList,m_channelBList;
int upDirection; //上肢旋转方向 1-正 0-逆
int downDirection; //下肢旋转方向 1-正 0-逆
int8_t m_bodyPart; //训练部位 0-上肢 1-下肢 2-上下肢
SpasmTipsDialog *m_spasmTipsDialog;
QTimer *heartTimer;
QTimer *countDownTimer; //倒计时
QTimer *paramPressTimer; //持续按主速度参数,改变值
QTimer *paramPressForceTimer; //持续按主阻力参数,改变值
ST_BicycleParam m_st_bicycleParam; //启动参数
int m_startNum; //倒计时初始值
int m_spasmTimes; //痉挛次数
QUdpSocket *m_gameSocket;
ST_TrainReport st_trainReport; //训练报告数据
ST_PatientMsg st_patientMsg; //患者信息
int8_t m_currentMode; //当前模式
int8_t m_AP_mode; //切换主被动的模式
QList<QPair<int,int>> balanceList;//左右平衡
QList<uint8_t> resistentList; //阻力集合
QList<uint8_t> speedList; //速度集合
TrainReport *m_reportDialog; //正常报告3行3图的报告
TrainReportTwoTwo *m_trainReportTwoTwo; //2行2图的报告
TrainReportTwoThree *m_trainReportTwoThree; //2行3图的报告
TrainReportThreeTwo *m_trainReportThreeTwo; //3行2图的报告
QuitGameDialog *m_quitDialog;
EmergencyStopDialog *m_emergencyDialog;
int8_t gameState; // 游戏训练状态 0-未开始 1-其他1开始2暂停
int heartCount; //心跳次数,用于检测通信
E_TRAINSTATE E_gameState;
int8_t m_currentDirection; //当前方向
int8_t m_gameRebackState; //游戏反馈的状态
QString m_tipStr;
long m_switchTimes;
int m_currentSpeed; //当前速度
bool m_decreasingSpeed,m_increasingSpeed; //判断连续按住速度是增还是减少
bool m_decreasingForce,m_increasingForce; //判断连续按住阻力是增还是减少
SoundDialog *m_soundDialog;
QuitBySpeedDialog *m_quitBySpeedDialog; // 速度退出提醒
};
#endif // GAMEDISPLAYPAGE_H