#include "mainwidget.h" #include "ui_mainwidget.h" #include #include "mainconfig.h" #define FIXEDIDCARD "" 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(); }); //显示连接状态 ui->statusLabel->setText("Not Connected"); //显示设置 font1.setPointSize(240); font2.setPointSize(240); 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); 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); //显示倒计时 int hour,min,sec,nTotalSecs; nTotalSecs = pInfo->realCountDownInSeconds; sec = nTotalSecs % 60; // min = nTotalSecs / 60 % 60; min = nTotalSecs / 60 ; //min显示大于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()-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() { QFontMetrics fm(font1); m_width = fm.width(ui->textLabel->text()); if(this->width() > m_width){ ui->textLabel->setGeometry((this->width()-m_width)/2, 0,m_width,(this->height()-30)/2); } else{ m_curX ++; ui->textLabel->setGeometry(20-m_curX,0,m_width,(this->height()-30)/2); // qDebug()<<"move" < (m_width - this->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, 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::onKeyClicked() { emit complexOneKeyStart("142733198703123918","彭于晏","1","汉族"); qDebug() << "Key Clicked"; } 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;iid == 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(); } }