forked from ccsens_hardware/qt_qcp_show
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.
237 lines
7.2 KiB
237 lines
7.2 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();
|
|
});
|
|
|
|
//显示连接状态
|
|
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);
|
|
|
|
//显示倒计时
|
|
QString str = "";
|
|
if(pInfo->realCountDownInSeconds < 0){
|
|
str = "";
|
|
}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()
|
|
{
|
|
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_curX;
|
|
}
|
|
if(m_curX > (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, 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();
|
|
}
|
|
}
|
|
|