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.
 
 
 

250 lines
7.4 KiB

#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QtCore>
#include "mainconfig.h"
#define NAMELIST_LENGTH 4
QString namelist[] = {"传立春","传立夏","传立秋","传立冬"};
qint8 gindex = 0;
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--;
}
}
updateUi();
});
//切换病人
m_switchPatientTimer.setInterval(m_switchPatientInterval * 1000);
m_switchPatientTimer.start();
connect(&m_switchPatientTimer, &QTimer::timeout,[=](){
if(++m_patientIndex >= m_patientEmergencyInfos.length()){
m_patientIndex = 0;
}
updateUi();
m_curX = 0;
});
//显示连接状态
ui->statusLabel->setText("Not Connected");
//显示设置
font1.setPointSize(180);
font2.setPointSize(180);
font3.setPointSize(20);
ui->textLabel->setFont(font1);
ui->countdownLabel->setFont(font2);
ui->statusLabel->setFont(font3);
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);
isFenzhen = false;
m_curX = 0;
connect(&m_lableScrollTimer,SIGNAL(timeout()),this,SLOT(lableScrollDisplay()));
m_lableScrollTimer.start(10);
}
MainWidget::~MainWidget()
{
delete ui;
}
void MainWidget::updateUi()
{
// m_curX = 0;//内容超出显示区域时,更新患者信息显示从头开始滚动
//更新statusLabel
// ui->statusLabel->setText(QString("%1 | %2")
// .arg(m_wsConnectedStatus == 0 ? "未连接" : "已连接")
// .arg(m_patientEmergencyInfos.length())
// );
if(m_wsConnectedStatus){
ui->LEDLabel->setStyleSheet("border-image: url(:/image/1LED_green.png);");
}else{
ui->LEDLabel->setStyleSheet("border-image: url(::/image/1LED_gray.png);");
}
ui->statusLabel->setText(QString::number(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);
//显示倒计时
QString str = "";
if(pInfo->realCountDownInSeconds < 0){
str = "";
isFenzhen = true;
}else{
int hour,min,sec,nTotalSecs;
nTotalSecs = pInfo->realCountDownInSeconds;
sec = nTotalSecs % 60;
// min = nTotalSecs / 60 % 60;
min = nTotalSecs / 60 ; //min显示大于60
hour = nTotalSecs / 3600;
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()-30)/2);
ui->countdownLabel->setGeometry(0,(this->height()-30)/2,this->width(),(this->height()-30)/2);
ui->LEDLabel->setGeometry(this->width()-120,this->height()-30,20,30);
ui->statusLabel->setGeometry(this->width()-80,this->height()-30,20,30);
}
void MainWidget::lableScrollDisplay()
{
// qDebug()<<"m_curX = "<<m_curX;
if(m_patientEmergencyInfos.length() == 0){
return;
}
QFontMetrics fm(font1);
m_width = fm.width(ui->textLabel->text());
m_height = ui->textLabel->height();
if(isFenzhen){
m_y = (this->height()-m_height)/2;
}
else{
int m_y = 0;
}
if(this->width() > m_width){
ui->textLabel->setGeometry((this->width()-m_width)/2, m_y,m_width,(this->height()-30)/2);
}
else{
m_curX ++;
ui->textLabel->setGeometry(150-m_curX*5,m_y,m_width,(this->height()-30)/2);
}
if(m_curX > m_width){
m_curX = 0;
}
}
void MainWidget::onWsConnectedStatusChanged(int status)
{
qDebug() << "MainWidget::onWsConnectedStatusChanged " << status;
m_wsConnectedStatus = status;
updateUi();
}
void MainWidget::onNewPatientMergencyInfo(QString firstAidId, QString name, QString content, qint64 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::onKeyClicked()
{
emit complexOneKeyStart("142733198703123918",::namelist[::gindex],"1","汉族");
qDebug() << "Key Clicked";
if(++::gindex >= NAMELIST_LENGTH){
::gindex = 0;
}
}
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;
}
}
}
void MainWidget::mouseDoubleClickEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton){
//TODO
}
else if(event->button()==Qt::RightButton){
onKeyClicked();
}
}