#ifndef GAMEDISPLAYPAGE_H #define GAMEDISPLAYPAGE_H #include #include #include #include "dataformate.h" #include "dbforrmate.h" #include "spasmtipsdialog.h" #include #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 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> balanceList;//左右平衡 QList resistentList; //阻力集合 QList 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