You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

179 lines
5.5 KiB

#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QtCore>
#include "mainconfig.h"
MainWidget::MainWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MainWidget)
{
ui->setupUi(this);
m_patientIndex = 0;
m_wsConnectedStatus = 0;
m_maxPatientNum = MainConfig::maxPatientNum.toInt();
m_switchPatientInterval = MainConfig::switchPatientInterval.toInt();
//1s倒计时
m_countDownTimer.setInterval(1000);
m_countDownTimer.start();
connect(&m_countDownTimer, &QTimer::timeout,[=](){
for(PatientEmergencyInfo *info : m_patientEmergencyInfos){
if(info->realCountDownInSeconds > 0){
info->realCountDownInSeconds--;
}
}
});
//切换病人
m_switchPatientTimer.setInterval(m_switchPatientInterval * 1000);
m_switchPatientTimer.start();
connect(&m_switchPatientTimer, &QTimer::timeout,[=](){
if(++m_patientIndex >= m_patientEmergencyInfos.length()){
m_patientIndex = 0;
}
updateUi();
});
//显示连接状态
ui->statusLabel->setText("Not Connected");
//显示设置
QFont font1, font2;
font1.setPointSize(150);
font2.setPointSize(20);
ui->textLabel->setFont(font1);
ui->countdownLabel->setFont(font1);
ui->statusLabel->setFont(font2);
ui->textLabel->setStyleSheet("QLabel {color: rgb(255,0,0);}");//设置文本红色
ui->countdownLabel->setStyleSheet("QLabel {color: rgb(255,0,0);}");//设置文本红色
ui->statusLabel->setStyleSheet("QLabel {color: rgb(85,255,0);}");//设置文本绿色
ui->textLabel->setAlignment(Qt::AlignHCenter);
ui->countdownLabel->setAlignment(Qt::AlignHCenter);
ui->statusLabel->setAlignment(Qt::AlignRight);
ui->textLabel->setAlignment(Qt::AlignCenter);
ui->countdownLabel->setAlignment(Qt::AlignCenter);
ui->statusLabel->setAlignment(Qt::AlignCenter);
}
MainWidget::~MainWidget()
{
delete ui;
}
void MainWidget::updateUi()
{
//更新statusLabel
ui->statusLabel->setText(QString("%1 | %2")
.arg(m_wsConnectedStatus == 0 ? "未连接" : "已连接")
.arg(m_patientEmergencyInfos.length())
);
if(m_patientEmergencyInfos.length() == 0){
//不显示
ui->textLabel->setText("");
ui->countdownLabel->setText("");
return;
}
//获取当前病人
if(m_patientIndex >= m_patientEmergencyInfos.length()){
m_patientIndex = 0;
}
PatientEmergencyInfo *pInfo = m_patientEmergencyInfos[m_patientIndex];
//显示文本
ui->textLabel->setText(pInfo->text);
//显示倒计时
int hour,min,sec,nTotalSecs;
nTotalSecs = pInfo->realCountDownInSeconds;
sec = nTotalSecs % 60;
min = nTotalSecs / 60 % 60;
hour = nTotalSecs / 3600;
QString str = QString("%1:%2").arg(min,2,10,QLatin1Char('0')).arg(sec,2,10,QLatin1Char('0'));
ui->countdownLabel->setText(str);
}
void MainWidget::paintEvent(QPaintEvent *event)
{
//设置背景图片
QPainter p(this);
p.drawPixmap(0,0,this->width(),this->height(),QPixmap(":/image/black_bg.jpg"));
// qDebug() << "MainWidget::paintEvent";
//重新调整label字体大小
//TODO
}
void MainWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
//标题
ui->textLabel->setGeometry(0,0,this->width(),(this->height()-20)/2);
ui->countdownLabel->setGeometry(0,(this->height()-20)/2,this->width(),(this->height()-20)/2);
ui->statusLabel->setGeometry(0,this->height()-16,this->width(),20);
}
void MainWidget::onWsConnectedStatusChanged(int status)
{
qDebug() << "MainWidget::onWsConnectedStatusChanged " << status;
m_wsConnectedStatus = status;
updateUi();
}
void MainWidget::onNewPatientMergencyInfo(QString firstAidId, QString name, QString content, quint64 realCountDownInSeconds)
{
//TODO 此处是否需要加锁处理
PatientEmergencyInfo *pInfo = new PatientEmergencyInfo(firstAidId,name,content,realCountDownInSeconds);
addPatientToList(pInfo);
qDebug() << "MainWidget::onNewPatientMergencyInfo " << firstAidId << name << content << realCountDownInSeconds;
}
void MainWidget::onPatientMergencyStatusChanged(QString firstAidId,QString time, QString status)
{
//TODO firstAidId == null 选择倒计时最小的急救
qDebug() << "MainWidget::onPatientMergencyStatusChanged " << firstAidId << time << status;
if(status == 0){
return;
}
//发送信号,该信号与httpservice的updatestatus请求绑定
emit statusChanged(firstAidId,status);
//处理状态改变
if(status == 1){ //进行中(拍了一下按键)
}else if(status == 2){//服务环节结束
deletePatientFromList(firstAidId);
}
}
void MainWidget::addPatientToList(PatientEmergencyInfo *info)
{
//1.如果有就删除,以保证同一个病人按两次应该重新开始计时
deletePatientFromList(info->id);
//2.如果超过长度,就删除第一个,取后来的
if(m_patientEmergencyInfos.length() >= m_maxPatientNum){
delete m_patientEmergencyInfos[0];
m_patientEmergencyInfos.pop_front();
}
//3.加入链表
m_patientEmergencyInfos.push_back(info);
}
void MainWidget::deletePatientFromList(QString firstAidId)
{
for(int i=0;i<m_patientEmergencyInfos.length();i++){
if(m_patientEmergencyInfos[i]->id == firstAidId){
delete m_patientEmergencyInfos[i];
m_patientEmergencyInfos.removeAt(i);
break;
}
}
}