project/xyylMCWEACSystem/leadscheme.cpp

570 lines
19 KiB
C++
Raw Normal View History

2024-11-26 17:16:25 +08:00
#include "leadscheme.h"
#include <QDebug>
#include <QJsonObject>
#include <QJsonValue>
#include <QButtonGroup>
#include "operatorjson.h"
#include <QApplication>
2024-12-03 16:37:00 +08:00
#include <QScrollArea>
#include <QDir>
#include <QFileInfoList>
#include <QFileInfo>
#include "logger.h"
2024-11-26 17:16:25 +08:00
LeadScheme::LeadScheme(QWidget * parent ):QWidget (parent)
{
init();
initconnect();
2024-11-26 17:16:25 +08:00
initLay();
}
LeadScheme::~LeadScheme()
{
}
void LeadScheme::init()
{
QSize sizetemp(60,60);
m_btnOK.setFixedSize(sizetemp);
m_btndelete.setFixedSize(sizetemp);
m_btnNew.setFixedSize(sizetemp);
// m_btnNew.setText("新建");
// m_btndelete.setText("删除");
// m_btnCancel.setText("取消");
// m_btnOK.setText("修改");
m_btnOK.setStyleSheet("QPushButton{border-image:url(:/image/EGG_icon_Modify.png);}"
"QPushButton:hover{border-image:url(:/image/EGG_icon_Modify_hover.png);}"
"QPushButton:pressed{border-image:url(:/image/EGG_icon_Modify_checked.png);}"
);
m_btndelete.setStyleSheet("QPushButton{border-image:url(:/image/EGG_icond_DeleteSh.png);}"
"QPushButton:hover{border-image:url(:/image/EGG_icon_DeleteSh_hover.png);}"
"QPushButton:pressed{border-image:url(:/image/EGG_icon_DeleteSh_checked.png);}"
);
m_btnNew.setStyleSheet("QPushButton{border-image:url(:/image/EGG_icon_newShec.png);}"
"QPushButton:hover{border-image:url(:/image/EGG_icon_newShec_hover.png);}"
"QPushButton:pressed{border-image:url(:/image/EGG_icon_newShec_checked.png);}"
);
2024-11-26 17:16:25 +08:00
}
bool LeadScheme::initconnect()
2024-11-26 17:16:25 +08:00
{
bool bCon = true;
bCon = connect(&m_btnOK,SIGNAL(clicked(bool)),this,SLOT(slotSave()));
if(!bCon)
{
logError()<<"connect failed"<<endl;
return bCon;
2024-11-26 17:16:25 +08:00
2024-12-03 17:00:01 +08:00
}
bCon = connect(&m_btnNew,SIGNAL(clicked(bool)),this,SLOT(slotNew()));
if(!bCon)
{
logError()<<"connect failed"<<endl;
2024-12-03 17:00:01 +08:00
return bCon;
}
bCon = connect(&m_btndelete,SIGNAL(clicked(bool)),this,SLOT(slotDelete()));
if(!bCon)
{
logError()<<"connect failed"<<endl;
2024-12-03 17:00:01 +08:00
return bCon;
}
return bCon;
2024-11-26 17:16:25 +08:00
}
2024-11-26 17:16:25 +08:00
void LeadScheme::initLay()
{
#if 0
2024-11-26 17:16:25 +08:00
QLabel * labScheme = new QLabel;
labScheme->setText("导联方案");
QVBoxLayout * vlayScheme = new QVBoxLayout;
vlayScheme->addWidget(labScheme);
vlayScheme->addWidget(&m_LeadSchemes);
QLabel * labNum = new QLabel;
labNum->setText("导联");
QVBoxLayout * vlayNum = new QVBoxLayout;
vlayNum->addWidget(labNum );
2024-11-26 17:16:25 +08:00
vlayNum->addWidget(&m_listNum);
QLabel * labPoints = new QLabel;
labPoints->setText("测点");
QVBoxLayout * vlayPoints = new QVBoxLayout;
vlayPoints->addWidget(labPoints);
vlayPoints->addWidget(&m_listPoints);
QLabel * labExPoints = new QLabel;
labExPoints->setText("参考点");
QVBoxLayout * vlayExPoints = new QVBoxLayout;
vlayExPoints->addWidget(labExPoints );
vlayExPoints->addWidget(&m_listExPoints );
2024-11-26 17:16:25 +08:00
QHBoxLayout * hlayWPoints = new QHBoxLayout;
QWidget * wPoints = new QWidget;
wPoints->setLayout(hlayWPoints);
hlayWPoints->addLayout(vlayNum );
2024-11-26 17:16:25 +08:00
hlayWPoints->addLayout(vlayPoints);
hlayWPoints->addLayout(vlayExPoints);
QLabel * labScheme = new QLabel;
labScheme->setText("导联方案");
QVBoxLayout * vlayScheme = new QVBoxLayout;
2024-11-29 16:44:01 +08:00
vlayScheme->addWidget(labScheme,1,Qt::AlignHCenter);
vlayScheme->addWidget(&m_LeadSchemes,1);
vlayScheme->addStretch();
#else
2024-11-26 17:16:25 +08:00
2024-11-29 16:44:01 +08:00
QLabel * labScheme = new QLabel;
labScheme->setText("导联方案");
2024-11-26 17:16:25 +08:00
QLabel * labNum = new QLabel;
labNum->setText("导联");
QLabel * labPoints = new QLabel;
labPoints->setText("测点");
QLabel * labExPoints = new QLabel;
labExPoints->setText("参考点");
//start
QWidget * wPoints = new QWidget;
wPoints->setStyleSheet("QPushButton{\
background: rgb(255, 255, 255);\
color: black;\
border-radius: 8px;\
border:0px ; \
}\
QPushButton:hover{\
color: black;\
background: rgb(255, 255, 255);\
border-radius: 8px;\
}\
QPushButton:pressed{\
color: black;\
background: rgb(255, 255, 255);\
border-radius: 8px;\
}\
QPushButton:checked{\
color: white;\
background: rgb(51, 144, 76);\
border-radius: 8px;\
}"\
"QWidget#NavList1{background-color:rgb(255, 255, 255);}"\
);
QGridLayout * gridlayOut = new QGridLayout;
QVBoxLayout * vlayPoints = new QVBoxLayout;
vlayPoints->addLayout(gridlayOut);
// vlayPoints->addStretch();
wPoints->setLayout(vlayPoints);
QStringList strList1,strList2,strList3;
strList1<<"0"<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9"<<"10"<<"11"<<
"12"<<"13"<<"14"<<"15";
strList2<<"F1"<<"F2"<<"F3"<<"F4"<<"C3"<<"C4"<<"P3"<<"P4"<<"O1"<<"O2"<<"F7"<<"F8"<<
"T3"<<"T4"<<"T5"<<"T6";
strList3<<"A1"<<"A2"<<"A1"<<"A1"<<"A2"<<"A1"<<"A2"<<"A1"<<"A2"<<"A1"<<"A2"<<"A1"<<
"A1"<<"A2"<<"A1"<<"A2";
pButtonGroup0 = new QButtonGroup(this);
2024-11-29 16:44:01 +08:00
QButtonGroup *pButtonGroup1 = new QButtonGroup(this);
// 设置互斥
pButtonGroup1->setExclusive(true);
QButtonGroup *pButtonGroup2= new QButtonGroup(this);
// 设置互斥
pButtonGroup2->setExclusive(true);
QButtonGroup *pButtonGroup3 = new QButtonGroup(this);
// 设置互斥
pButtonGroup3->setExclusive(true);
2024-11-29 16:44:01 +08:00
int colmn = 0;
2024-12-03 16:37:00 +08:00
#if 0
2024-11-29 16:44:01 +08:00
QStringList Sches;
Sches<<"8通道"<<"16通道"<<"64通道";
gridlayOut->addWidget(labScheme,0,colmn++,Qt::AlignHCenter);
for (int i= 0 ; i<Sches.size();i++)
{
QPushButton * btn = new QPushButton(Sches.at(i));
//btn->setMinimumHeight(minHeight);
btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pButtonGroup0->addButton(btn);
gridlayOut->addWidget( btn,i+1,0);
btn->setCheckable(true);
}
2024-12-03 16:37:00 +08:00
#else
QStringList Sches;
Sches<<"8通道"<<"16通道"<<"64通道";
//遍历加载当前已经存在的方案
QDir dir(QApplication::applicationDirPath()+"/Scheme/");
QStringList fileList;
QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot | QDir::Dirs);
foreach (auto fileInfo, fileInfoList)
{
if(fileInfo.isFile())
{
if(!Sches.contains(fileInfo.baseName()) && fileInfo.baseName().compare("0")!=0)
{
Sches.append(fileInfo.baseName());
}
}
}
2024-12-03 16:37:00 +08:00
gridlayOut->addWidget(labScheme,0,colmn++,Qt::AlignHCenter);
QScrollArea * scroll = new QScrollArea;
scroll->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
scroll->setWidgetResizable(true);
scroll->setAlignment(Qt::AlignRight);
QWidget * wShech = new QWidget;
gridlayOut->addWidget(scroll,1,colmn-1,12,1);
// QGridLayout * gridShech = new QGridLayout;
2024-12-04 11:30:38 +08:00
m_vlayHH = new QVBoxLayout;
wShech->setLayout(m_vlayHH);
2024-12-03 16:37:00 +08:00
for (int i= 0 ; i<Sches.size();i++)
{
QPushButton * btn = new QPushButton(Sches.at(i));
connect(btn,SIGNAL(clicked(bool)),this,SLOT(slotUpdateCurScheme()));
2024-12-03 16:37:00 +08:00
btn->setMaximumHeight(40);
btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pButtonGroup0->addButton(btn);
//gridShech->addWidget( btn,i+1,0);
2024-12-04 11:30:38 +08:00
m_vlayHH->addWidget(btn);
2024-12-03 16:37:00 +08:00
btn->setCheckable(true);
m_listBtnsSchemes.append(btn);
2024-12-03 16:37:00 +08:00
}
2024-12-04 11:30:38 +08:00
m_vlayHH->addStretch();
2024-11-29 16:44:01 +08:00
2024-12-03 16:37:00 +08:00
scroll->setWidget(wShech);
QHBoxLayout * hbtn = new QHBoxLayout;
hbtn->addStretch();
hbtn->addWidget(&m_btnNew);
hbtn->addWidget(&m_btndelete);
//hbtn->addWidget(&m_btnCancel);
hbtn->addWidget(&m_btnOK);
hbtn->addStretch();
gridlayOut->addLayout(hbtn,14,colmn-1,1,1);
QLabel * desLab = new QLabel;
desLab->setText("1 选择重构方式0-9\n(注意0方式不能重构\n2 左键点击重构选择测参点\n3左键点击部位要选择的点)");
gridlayOut->addWidget(desLab,15,colmn-1,3,1);
#endif
2024-11-29 16:44:01 +08:00
gridlayOut->addWidget(labNum,0,colmn++,Qt::AlignHCenter);
int minHeight = 45;
for (int i = 0 ;i<strList1.size();i++)
{
QPushButton * btn = new QPushButton(strList1.at(i));
//btn->setMinimumHeight(minHeight);
btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pButtonGroup1->addButton(btn);
2024-11-29 16:44:01 +08:00
gridlayOut->addWidget( btn,i+1,1);
btn->setCheckable(true);
}
2024-11-29 16:44:01 +08:00
gridlayOut->addWidget( labPoints,0,colmn++,Qt::AlignHCenter);
for (int i = 0 ;i<strList2.size();i++)
{
QPushButton * btn = new QPushButton(strList2.at(i));
//btn->setMinimumHeight(minHeight);
btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pButtonGroup2->addButton(btn);
2024-11-29 16:44:01 +08:00
gridlayOut->addWidget( btn,i+1,2);
btn->setCheckable(true);
}
2024-11-29 16:44:01 +08:00
gridlayOut->addWidget( labExPoints,0,colmn++,Qt::AlignHCenter);
for (int i = 0 ;i<strList3.size();i++)
{
QPushButton * btn = new QPushButton(strList3.at(i));
//btn->setMinimumHeight(minHeight);
btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pButtonGroup3->addButton(btn);
2024-11-29 16:44:01 +08:00
gridlayOut->addWidget( btn,i+1,3);
btn->setCheckable(true);
}
//end
#endif
QWidget * wClickedPints = new QWidget;
wClickedPints->setStyleSheet("border-image:url(:/image/img_lead.png);}");
2024-12-03 16:48:24 +08:00
QVBoxLayout * vlaypointsTemp = new QVBoxLayout;
m_editShecName.setFixedWidth(180);
m_editShecName.setPlaceholderText("输入方案名称");
vlaypointsTemp->addWidget(&m_editShecName);
vlaypointsTemp->addWidget(wClickedPints);
QWidget * ww =new QWidget;
ww->setLayout(vlaypointsTemp);
// wClickedPints->setFixedWidth(500);
//wClickedPints->show();
2024-11-26 17:16:25 +08:00
QHBoxLayout * hlayAll = new QHBoxLayout;
2024-11-29 16:44:01 +08:00
// hlayAll->addLayout(vlayScheme,1);
hlayAll->addWidget(wPoints,3);
2024-12-03 16:48:24 +08:00
hlayAll->addWidget(ww,3);
QList<QColor> colors;
colors.append(QColor(100, 184, 255));
colors.append(QColor(255, 107, 107));
colors.append(QColor(24, 189, 155));
colors.append(QColor(1, 174, 103));
colors.append(QColor(52, 73, 94));
int x = 5;
int y = 5;
int radius = 50;
QStringList listNames;
listNames<<"Fp1"<<"Fp2"
<<"F7"<<"F3"<<"Fz"<<"F4"<<"F8"
<<"A1"<<"T3"<<"C3"<<"Cz"<<"C4"<<"T4"<<"A2"
<<"T5"<<"P3" <<"Pz"<<"P4" <<"T6"
<<"O1"<<"O2";
QJsonObject json;
OperatorJson Ojson;
Ojson.readJson(QApplication::applicationDirPath()+"/Scheme/0.json",json);
qDebug()<<"hahaha"<<json<<endl;
for(int i = 0 ; i< listNames.size();i++)
{
MoveButton * btn = new MoveButton(wClickedPints);
btn->setParent(wClickedPints);
int x =json[listNames.at(i)].toObject()["x"].toInt();
int y = json[listNames.at(i)].toObject()["y"].toInt();
btn->setGeometry(x,y, radius, radius);
//x = x + radius;
btn->setText(listNames.at(i));
btn->setCanMove(true);
btn->setShowOverlay(true);
btn->setBgColor(QColor(1, 174, 103));
m_listMoveBtns.append(btn);
}
QWidget * Wall = new QWidget;
Wall->setLayout(hlayAll);
Wall->setStyleSheet("QWidget \
{\
background-color:white;\
border-radius:10px;\
}");
QVBoxLayout * vlayAll = new QVBoxLayout;
vlayAll->addWidget(Wall);
2024-12-03 16:37:00 +08:00
//vlayAll->addLayout(hbtn);
setLayout(vlayAll);
2024-11-26 17:16:25 +08:00
}
2024-12-04 11:30:38 +08:00
void LeadScheme::reLay()
{
QLayoutItem *child;
while ((child = m_vlayHH->takeAt(0)) != 0)
{
//删除Stretch(弹簧)等布局
if (child->spacerItem())
{
m_vlayHH->removeItem(child);
continue;
}
//删除布局
//删除布局
QWidget * w = child->widget();
m_vlayHH->removeWidget(child->widget());
child->widget()->setParent(0);
if (w)
{
w->deleteLater();
}
}
2024-12-03 17:00:01 +08:00
}
void LeadScheme::slotUpdateCurScheme()
{
//1获取方案名称
QPushButton *btn = static_cast<QPushButton*>( sender());
if(btn)
{
m_CurScheme = btn->text();
}
//2检查对应的方案名称是否存在
//2.1)存在就加载原来的
QString sFileName = QApplication::applicationDirPath()+"/Scheme/"+m_CurScheme+".json";
if(QFile::exists(sFileName))
{
int radius = 50;
QJsonObject json;
OperatorJson Ojson;
Ojson.readJson(sFileName,json);
for(int i = 0 ; i< json.keys().size();i++)
{
for(int j =0 ;j < m_listMoveBtns.size();j++)
{
if(m_listMoveBtns.at(j)->getText().compare(json.keys().at(i)) ==0)
{
MoveButton * btn = m_listMoveBtns.at(j);
int x =json[json.keys().at(i)].toObject()["x"].toInt();
int y = json[json.keys().at(i)].toObject()["y"].toInt();
btn->setGeometry(x,y, radius, radius);
}
}
}
}
else // (2.2)不存在就加载模版
{
int radius = 50;
QJsonObject json;
OperatorJson Ojson;
Ojson.readJson(QApplication::applicationDirPath()+"/Scheme/0.json",json);
for(int i = 0 ; i< json.keys().size();i++)
{
for(int j =0 ;j < m_listMoveBtns.size();j++)
{
if(m_listMoveBtns.at(j)->getText().compare(json.keys().at(i)) ==0)
{
MoveButton * btn = m_listMoveBtns.at(j);
int x =json[json.keys().at(i)].toObject()["x"].toInt();
int y = json[json.keys().at(i)].toObject()["y"].toInt();
btn->setGeometry(x,y, radius, radius);
}
}
}
}
//保存最新的位置
QJsonObject jsonSave;
for(int i = 0;i< m_listMoveBtns.size();i++ )
{
auto btn = m_listMoveBtns.at(i);
QString text = btn->getText();
int x = btn->x();
int y = btn->y();
QJsonObject perJson;
perJson.insert("x",x);
perJson.insert("y",y);
jsonSave.insert(text,perJson);
qDebug()<<QString("名称:%1\tx:%2\ty:%3").arg(text).arg(x).arg(y)<<endl;
}
OperatorJson json;
json.savaJson(jsonSave,QApplication::applicationDirPath()+"/Scheme/"+m_CurScheme+".json");
2024-12-04 11:30:38 +08:00
}
void LeadScheme::slotSave()
{
QJsonObject jsonSave;
for(int i = 0;i< m_listMoveBtns.size();i++ )
{
auto btn = m_listMoveBtns.at(i);
QString text = btn->getText();
int x = btn->x();
int y = btn->y();
QJsonObject perJson;
perJson.insert("x",x);
perJson.insert("y",y);
jsonSave.insert(text,perJson);
qDebug()<<QString("名称:%1\tx:%2\ty:%3").arg(text).arg(x).arg(y)<<endl;
}
OperatorJson json;
json.savaJson(jsonSave,QApplication::applicationDirPath()+"/Scheme/"+m_CurScheme+".json");
}
2024-12-03 17:00:01 +08:00
void LeadScheme::slotNew()
{
//1 新建方案名称不为空 且不重复
QString schemeName = m_editShecName.text();
if(schemeName.isEmpty())
{
logError()<<"Shech Name is empty!"<<endl;
return ;
}
//2 判断名称是否有重复
QStringList listNames;
schemeName = schemeName.trimmed();
for(int i = 0 ; i< m_listBtnsSchemes.size();i++)
{
QString name = m_listBtnsSchemes.at(i)->text();
if(name.compare(schemeName)== 0)
{
logError()<<"Shech Name is repeated!"<<endl;
return ;
}
listNames.append(name);
}
listNames.append(schemeName);
//3 获取当前所有方案名称
m_listBtnsSchemes.clear();
reLay();
//4 重新布局
for (int i= 0 ; i<listNames.size();i++)
{
QPushButton * btn = new QPushButton(listNames.at(i));
connect(btn,SIGNAL(clicked(bool)),this,SLOT(slotUpdateCurScheme()));
btn->setMaximumHeight(40);
btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pButtonGroup0->addButton(btn);
//gridShech->addWidget( btn,i+1,0);
m_vlayHH->addWidget(btn);
btn->setCheckable(true);
m_listBtnsSchemes.append(btn);
}
m_vlayHH->addStretch();
2024-12-03 17:00:01 +08:00
}
void LeadScheme::slotDelete()
{
//1 获取当前列表,从当前列表中获取出被选中的要删除的
QString sDeleName;
QStringList listNames;
for(int i = 0 ; i< m_listBtnsSchemes.size();i++)
{
if(m_listBtnsSchemes.at(i)->isChecked())
{
//logError()<<"delete:"<<m_listBtnsSchemes.at(i)->text()<<endl;
sDeleName=m_listBtnsSchemes.at(i)->text();
continue;
}
listNames.append(m_listBtnsSchemes.at(i)->text());
}
//2 重新布局
m_listBtnsSchemes.clear();
reLay();
//3
for (int i= 0 ; i<listNames.size();i++)
{
QPushButton * btn = new QPushButton(listNames.at(i));
connect(btn,SIGNAL(clicked(bool)),this,SLOT(slotUpdateCurScheme()));
btn->setMaximumHeight(40);
btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
pButtonGroup0->addButton(btn);
//gridShech->addWidget( btn,i+1,0);
m_vlayHH->addWidget(btn);
btn->setCheckable(true);
m_listBtnsSchemes.append(btn);
}
m_vlayHH->addStretch();
//4 删除对应的位置文件
QFile::remove( QApplication::applicationDirPath()+"/Scheme/"+sDeleName+".json");
2024-12-03 17:00:01 +08:00
}