DataPlayer/ChaosDataPlayer/MainWidget.cpp

2904 lines
123 KiB
C++
Raw Normal View History

2022-07-30 11:50:01 +08:00
#include "MainWidget.h"
#include "ui_MainWidget.h"
#include <QFileDialog>
#include <QDebug>
#include <QtGlobal>
#include <QThread>
#include <QUdpSocket>
#include <QDateTime>
#include <QMenu>
#include <QAction>
#include <QFileDialog>
#include <QDesktopServices>
#include <QElapsedTimer>
#include "ChildForm.h"
#include "Child3dFrom.h"
#include "cidwudp.h"
#include "NetMgr.h"
#include "msgbox.h"
#include <exception>
DEVICE_INFO deviceInfo;
#define FLAG_ROLE (Qt::UserRole + 2)
#define NO_ROLE (Qt::UserRole + 3) //存储设备号
#define IP_ROLE (Qt::UserRole + 4) //存储ip
#define FILE_ROLE (Qt::UserRole + 5) //本地Dat
int channelwork[32];
int channelEnabled[32];
bool AddFlag = false;
MainWidget::MainWidget(QWidget *parent)
: BaseWgt(parent)
, ui(new Ui::MainWidget)
{
ui->setupUi(m_pMainWgt);
resize(m_pMainWgt->size());
setWindowTitle("Chaos Data Player");
m_iCurCount = 1;
m_backPlay = false;
Init();
InitSignalandSlot();
}
MainWidget::~MainWidget()
{
if(m_pTimer)
{
m_pTimer->deleteLater();
}
delete ui;
}
void MainWidget::Init()
{
ui->treeWidget->expandAll();
ui->treeWidget->setColumnCount(3);
ui->treeWidget->setColumnWidth(0, 700);
ui->treeWidget->setColumnWidth(1, 150);
ui->treeWidget->setColumnWidth(2, 160);
ui->tabWidget->setIconSize(QSize(30, 30));
ui->tabWidget->setTabsClosable(false);
ui->splitter->setHandleWidth(1);
QList<int> m_splitterLengths(ui->splitter->sizes());
m_splitterLengths[0] = 200;
m_splitterLengths[1] = 500;
ui->splitter->setSizes(m_splitterLengths);
m_HideDevList = false;
QString strCount = QString("%1/%2").arg(0).arg(0);
ui->label_value->setText(strCount);
ui->horizontalSlider->setRange(0,0);
m_pTimer = new QTimer(this);
connect(m_pTimer, SIGNAL(timeout()), this, SLOT(TimerSlot()));
m_pCIDWUdp = new CIDWUdp();
m_pThread = new QThread;
//移动到另一线程
m_pCIDWUdp->moveToThread(m_pThread);
connect(m_pCIDWUdp, SIGNAL(RetSignal(QString,QString)), this, SLOT(RetSlot(QString,QString)));
//connect(m_pCIDWUdp, SIGNAL(IpSignal(QString)), this, SLOT(IpSlot(QString)));
connect(m_pThread, SIGNAL(finished()), m_pCIDWUdp, SLOT(deleteLater()));
m_pThread->start();
m_pNetMgr = new NetMgr(this);
//设置拖动布局的初始比例
ui->splitter->setStretchFactor(0, 1); // widget gets 3 out of 4 width/height units
ui->splitter->setStretchFactor(1, 5);
ui->tabWidget->setStyleSheet("QTabWidget#tabWidget{background-color:rgb(255,0,0);}\
QTabBar::tab{background-color:rgb(58,63,72);color:rgb(170,195,207);font:12pt ''}\
QTabBar::tab::selected{background-color:rgb(28,28,36);color:rgb(170,195,207);font:12pt ''}");
ui->Btn_Setting->setVisible(false);
InitDevList();
}
void MainWidget::InitDevList()
{
int iRet = sql_db.OpenDataBase();
qDebug() <<"iRet" <<iRet << endl;
iRet = sql_db.CreateDataBase();
sql_db.InitDevice();
QString tablename = "t_Device";
QString Col = "DeviceIP";
array_t DevList = sql_db.GetDataMultiLine(tablename,Col,"");
for(int i = 0; i < DevList.size();i++){
qDebug()<<"InitDevList"<<DevList[i][2];
IpSlot(DevList[i][0],DevList[i][1],DevList[i][2]);
}
}
void MainWidget::InitSignalandSlot()
{
connect(ui->fileBtn, SIGNAL(clicked()), this, SLOT(OpenFileSlot())); //打开文件
connect(ui->modelBtn_TrendChart, SIGNAL(clicked()), this, SLOT(TrendChartPlotSlot())); //趋势图
connect(ui->modelBtn_TimeDomain, SIGNAL(clicked()), this, SLOT(TimeDomainPlotSlot())); //时域图
connect(ui->modelBtn_spec, SIGNAL(clicked()), this, SLOT(FrequencyDomainPlotSlot())); //频域图
connect(ui->modelBtn_env, SIGNAL(clicked()), this, SLOT(EnvelopeAnalysisPlotSlot())); //包络图
connect(ui->modelBtn_4, SIGNAL(clicked()), this, SLOT(WaterFallPlotSlot())); //瀑布图
connect(ui->modelBtn_7, SIGNAL(clicked()), this, SLOT(OrbitPlotSlot())); //轴心轨迹图图
connect(ui->modelBtn_8, SIGNAL(clicked()), this, SLOT(PolarplotSlot())); //极坐标
connect(ui->modelBtn_5, SIGNAL(clicked()), this, SLOT(BodePlotSlot()));
connect(ui->modelBtn_6, SIGNAL(clicked()), this, SLOT(ShaftCenterlinePlotSlot()));
connect(ui->modelBtn_12, SIGNAL(clicked()), this, SLOT(View3D()));
connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(Dat2Csv()));
connect(ui->refreshBtn, SIGNAL(clicked()), this, SLOT(RefreshBtnSlot()));//刷新终端列表
connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(SlidervalueChangedSlot(int)));
connect(ui->PauseBtn, SIGNAL(clicked()), this, SLOT(PlayBtnSlot()));
connect(ui->backBtn, SIGNAL(clicked()), this, SLOT(Back1SBtnSlot()));
connect(ui->back2sBtn, SIGNAL(clicked()), this, SLOT(Back2SBtnSlot()));
connect(ui->back3sBtn, SIGNAL(clicked()), this, SLOT(Back3SBtnSlot()));
connect(ui->add1sBtn, SIGNAL(clicked()), this, SLOT(Add1SBtnSlot()));
connect(ui->add2sBtn, SIGNAL(clicked()), this, SLOT(Add2SBtnSlot()));
connect(ui->add3sBtn, SIGNAL(clicked()), this, SLOT(Add3SBtnSlot()));
connect(ui->addButton, SIGNAL(clicked()), this, SLOT(AddDevice()));
connect(ui->HideDev_Btn, SIGNAL(clicked()), this, SLOT(HideDev()));
connect(ui->ReportButton, SIGNAL(clicked()), this, SLOT(Report()));
connect(ui->pushButton_6, SIGNAL(clicked()), this, SLOT(ExitFile()));
connect(ui->Btn_Setting, SIGNAL(clicked()), this, SLOT(Setting()));
connect(ui->treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *,int)), this, SLOT(slotItemDoubleClicked(QTreeWidgetItem *, int )));
//绑定HTTP消息响应
connect(m_pNetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
bool a = QObject::connect(ui->treeWidget, &QTreeWidget::customContextMenuRequested, this, &MainWidget::slotCustomContextMenuRequested);
ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
}
void MainWidget::slotItemDoubleClicked(QTreeWidgetItem *pItem, int column)
{
if(pItem->parent() == NULL)
return;
if(pItem && pItem->parent())
{
if(pItem->data(0, FLAG_ROLE).toString() == "config")
{
WebBtnSlot(pItem->parent()->text(0));
return;
}
}
if(pItem && pItem->parent() &&(pItem->parent()->data(0, FLAG_ROLE).value<QString>().contains("change") ||
pItem->parent()->data(0, FLAG_ROLE).value<QString>().contains("size") ||
pItem->parent()->data(0, FLAG_ROLE).value<QString>().contains("time") ||
pItem->parent()->data(0, FLAG_ROLE).value<QString>().contains("manu"))
)
{
{
QString strData = pItem->parent()->data(0, FLAG_ROLE).value<QString>();
QString strIP = pItem->parent()->parent()->parent()->data(0, IP_ROLE).value<QString>();
qDebug()<<"MainWidget"<<strIP;
QTreeWidgetItem *pItemNO = findNOItemByIP(strIP);
QString strNO = pItemNO->data(0,NO_ROLE).value<QString>();
QString FileName = pItem->text(0);
qDebug()<<"MainWidget"<<strData;
qDebug()<<"MainWidget"<<strNO;
qDebug()<<"MainWidget"<<pItem->text(0);
QString datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNO + "\\" + strData + "\\";
qDebug()<<"MainWidget"<<datpath;
QFileInfo file(datpath + FileName);
if(file.exists())
{
ReadDatData(datpath + FileName,FileName,strIP);
return;
}
//QString dirpath = QFileDialog::getExistingDirectory(this, QStringLiteral("选择目录"), "./", QFileDialog::ShowDirsOnly);
//if(dirpath.isEmpty()) dirpath = QDir::currentPath();
QDir dir(datpath);
if(!dir.exists())
{
dir.mkpath(datpath);
}
qDebug()<<"datpath" <<datpath;
doDownLoad(pItem, datpath);
}
}
}
void MainWidget::WebBtnSlot(QString sAddr)
{
int bpos = sAddr.indexOf("(");
sAddr = sAddr.right(sAddr.length()- bpos -1);
sAddr = sAddr.left(sAddr.length()-1);
sAddr = "http://" + sAddr + "/#/home/monitor";
bool bOpen = QDesktopServices::openUrl(QUrl(sAddr));
qDebug()<<QString("[MainWidget::WebBtnSlot] Open url(%1) is %2").arg(sAddr).arg(bOpen) ;
}
void MainWidget::SearchSlot(QString strIP,bool AutoSearch)
{
qDebug()<<"MainWidget::RefreshBtnSlot()";
char Cmd04[64] = {0};
sprintf(Cmd04, "{\"cmd\":\"04\",\"status\":\"REQ\", \"type\":\"get\", \"way\":\"mul\"}");
QUdpSocket udp;
if(AutoSearch){
//ui->treeWidget->clear();
udp.writeDatagram(Cmd04,64,QHostAddress("224.0.0.1"), 7301);
}
else{
QString whereCon = QString("DeviceIP = '%1'").arg(strIP);
QString tableName = "t_Device ";
QString column = "count(*)";
int iRet = sql_db.QueryData(tableName,column,whereCon);
if(iRet >0){
MyMsgBox(QMessageBox::Question,"警告","终端已经存在!");
pAddDevice->close();
delete pAddDevice;
return;
}
AddFlag = true;
udp.writeDatagram(Cmd04,64,QHostAddress(strIP), 7301);
}
qDebug() << "cmd:" << Cmd04;
}
void MainWidget::RefreshBtnSlot()
{
ui->treeWidget->clear();
InitDevList();
/*QString tablename = "t_Device";
QString Col = "DeviceIP";
array_t DevList = sql_db.GetDataMultiLine(tablename,Col,"Online = '0' ");
for(int i = 0 ; i < DevList.size();i++){
QTreeWidgetItem *pTopItem = new QTreeWidgetItem();
if(m_pNetMgr)
{
m_pNetMgr->RequestFileInfo(DevList[i][0]);
m_pNetMgr->RequestChannelInfo(DevList[i][0]);
}
}*/
}
//输入ip返回IP节点下的数据节点
QTreeWidgetItem *MainWidget::findDataItemByIP(QString sIP)
{
int icount = ui->treeWidget->topLevelItemCount();
for (int i = 0; i < icount; ++i)
{
QTreeWidgetItem *pTopItem = ui->treeWidget->topLevelItem(i);
if(!(pTopItem->text(0).contains(sIP))) continue;
for (int j = 0; j < pTopItem->childCount(); ++j)
{
QTreeWidgetItem *pItem = pTopItem->child(j);
QString sFlag = pItem->data(0, FLAG_ROLE).value<QString>();
if(sFlag.contains("data"))
{
return pItem;
}
}
}
return nullptr;
}
QTreeWidgetItem *MainWidget::findNameItemByIP(QString sIP)
{
int icount = ui->treeWidget->topLevelItemCount();
for (int i = 0; i < icount; ++i)
{
QTreeWidgetItem *pTopItem = ui->treeWidget->topLevelItem(i);
if(!(pTopItem->text(0).contains(sIP))) continue;
for (int j = 0; j < pTopItem->childCount(); ++j)
{
QTreeWidgetItem *pItem = pTopItem->child(j);
QString sFlag = pItem->data(0, FLAG_ROLE).value<QString>();
if(sFlag.contains("name"))
{
return pItem;
}
}
}
return nullptr;
}
//根据设备IP返回对应的WidgetItem
QTreeWidgetItem *MainWidget::findNOItemByIP(QString sIP)
{
int icount = ui->treeWidget->topLevelItemCount();
for (int i = 0; i < icount; ++i)
{
QTreeWidgetItem *pTopItem = ui->treeWidget->topLevelItem(i);
if(!(pTopItem->text(0).contains(sIP))) continue;
for (int j = 0; j < pTopItem->childCount(); ++j)
{
QTreeWidgetItem *pItem = pTopItem->child(j);
QString sFlag = pItem->data(0, FLAG_ROLE).value<QString>();
if(sFlag.contains("NO"))
{
return pItem;
}
}
}
return nullptr;
}
QString MainWidget::getServerAddrByEquipNo(QString sEquipNo)
{
for (int iTop = 0; iTop <ui->treeWidget->topLevelItemCount(); ++iTop)
{
QTreeWidgetItem *pTopItem = ui->treeWidget->topLevelItem(iTop);
if(!pTopItem) continue;
for (int j = 0; j < pTopItem->childCount(); ++j)
{
QTreeWidgetItem *pItem = pTopItem->child(j);
QString sFlag = pItem->data(0, FLAG_ROLE).value<QString>();
if(sFlag.contains("NO") && pItem->data(0,NO_ROLE).toString() == sEquipNo)
{
return pItem->parent()->data(0, IP_ROLE).toString();
}
}
}
return "";
}
void MainWidget::slotNetMgr(QString sAddr, const QVariant &msg)
{
QStringList sList = sAddr.split('+');
if(sList.size() != 2) return;
sAddr = sList.at(0);
if(sList.contains("RequestFileList"))
{
parseFileListData(sAddr, msg);
}
else if(sList.contains("RequestFileInfo"))
{
parseFileInfoData(sAddr, msg);
}else if(sList.contains("RequestFileInfo"))
{
paraseChannelInfo(sAddr, msg);
}
QTreeWidgetItem *pDataItem = findDataItemByIP(sAddr);
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
pDataItem->parent()->setIcon(0, icon);
}
void MainWidget::parseFileListData(QString sAddr, const QVariant &msg)
{
QTreeWidgetItem *pDataItem = findDataItemByIP(sAddr);
int iDataCount = pDataItem->childCount();
QTreeWidgetItem *pDNoItem = findNOItemByIP(sAddr);
QString strNo = pDNoItem->data(0,NO_ROLE).value<QString>();
if(!m_mapAddrToFiles.contains(sAddr))
{
QVector<FileData> vecData;
m_mapAddrToFiles[sAddr] = vecData;
}
QJsonObject objec = msg.value<QJsonObject>();
if(objec.contains("cmd"))
{
QJsonValue arrays_value = objec.take("cmd");
//qDebug()<<"cmd ="<<arrays_value.toString();
}
if(objec.contains("message"))
{
QJsonValue arrays_value = objec.take("message");
//qDebug()<<"message ="<<arrays_value.toString();
}
if(objec.contains("success"))
{
QJsonValue arrays_value = objec.take("success");
//qDebug()<<"success ="<<arrays_value.toBool();
}
if(objec.contains("content")) //content
{
QJsonValue content_value = objec.take("content");
if(content_value.isObject())
{
QJsonObject contentObj = content_value.toObject();
if(contentObj.contains("page"))
{
QJsonValue Json_value = contentObj.take("page");
//qDebug()<<"page ="<<Json_value.toInt();
}
if(contentObj.contains("pageMax"))
{
QJsonValue Json_value = contentObj.take("pageMax");
//qDebug()<<"pageMax ="<<Json_value.toInt();
}
if(contentObj.contains("fileInfo")) //fileInfo
{
QJsonValue Json_value = contentObj.take("fileInfo");
if(Json_value.isArray())//判断它是不是json组
{
QJsonArray array = Json_value.toArray();
int nsize = array.size();
//qDebug()<<"array.size() ="<<array.size();
for (int i = 0; i < pDataItem->childCount(); ++i){
QTreeWidgetItem *pItem = pDataItem->child(i);
for(int j = 0; j < pItem->childCount();j++){
pItem->removeChild(pItem->child(j));
}
}
for(int i = 0; i< nsize; ++i)//groups
{
int time = array.at(i).toObject().value("creatTime").toInt();
QString strName = array.at(i).toObject().value("fileName").toString();
int size = array.at(i).toObject().value("fileSize").toInt();
FileData stData;
stData.sfileName = strName;
stData.iCreatTime = time;
stData.iFileSize = size;
//存储数据
QVector<FileData> vecData = m_mapAddrToFiles.value(sAddr);
vecData.push_back(stData);
m_mapAddrToFiles[sAddr] = vecData;
//qDebug()<<"Addr::"<<sAddr<<"file,size()"<<vecData.size();
//挂子节点
addChildItem(pDataItem, pDNoItem,strName, time);
}
}
}
}
}
}
void MainWidget::parseFileInfoData(QString sAddr, const QVariant &msg)
{
// if(!m_mapAddrToFiles.contains(sAddr))
// {
// QVector<FileData> vecData;
// m_mapAddrToFiles[sAddr] = vecData;
// }
//QTreeWidgetItem *pNameItem = findNameItemByIP(sAddr);
QTreeWidgetItem *pNOItem = findNOItemByIP(sAddr);
QJsonObject objec = msg.value<QJsonObject>();
if(objec.contains("cmd"))
{
QJsonValue arrays_value = objec.take("cmd");
//qDebug()<<"cmd ="<<arrays_value.toString();
}
if(objec.contains("message"))
{
QJsonValue arrays_value = objec.take("message");
//qDebug()<<"message ="<<arrays_value.toString();
}
if(objec.contains("success"))
{
QJsonValue arrays_value = objec.take("success");
//qDebug()<<"success ="<<arrays_value.toBool();
}
if(objec.contains("cmdSerial"))
{
QJsonValue arrays_value = objec.take("cmdSerial");
//qDebug()<<"cmdSerial ="<<arrays_value.toString();
}
if(objec.contains("dataWatchNo"))
{
QJsonValue arrays_value = objec.take("dataWatchNo");
//qDebug()<<"dataWatchNo ="<<arrays_value.toString();
}
if(objec.contains("content")) //content
{
QJsonValue content_value = objec.take("content");
if(content_value.isObject())
{
QJsonObject contentObj = content_value.toObject();
if(contentObj.contains("SystemInfo"))
{
QJsonValue SystemInfo_value = contentObj.take("SystemInfo");
if(SystemInfo_value.isObject())
{
QJsonObject SystemInfoObj = SystemInfo_value.toObject();
if(SystemInfoObj.contains("dataWatchAddedBy"))
{
QJsonValue Json_value = SystemInfoObj.take("dataWatchAddedBy");
//qDebug()<<"dataWatchAddedBy ="<<Json_value.toString();
}
if(SystemInfoObj.contains("dataWatchAddedDate"))
{
QJsonValue Json_value = SystemInfoObj.take("dataWatchAddedDate");
//qDebug()<<"dataWatchAddedDate ="<<Json_value.toString();
}
if(SystemInfoObj.contains("dataWatchAssetId"))
{
QJsonValue Json_value = SystemInfoObj.take("dataWatchAssetId");
//qDebug()<<"dataWatchAssetId ="<<Json_value.toString();
}
if(SystemInfoObj.contains("dataWatchIpAddress"))
{
QJsonValue Json_value = SystemInfoObj.take("dataWatchIpAddress");
//qDebug()<<"dataWatchIpAddress ="<<Json_value.toString();
}
QString dataWatchName = "",dataWatchNo = "", deviceType = "";
if(SystemInfoObj.contains("dataWatchName"))
{
QJsonValue Json_value = SystemInfoObj.take("dataWatchName");
//qDebug()<<"dataWatchName ="<<Json_value.toString();
if(pNOItem && pNOItem->parent())
{
QString str = "";
dataWatchName = Json_value.toString();
/*if(dataWatchName == ""){
str = "Data Watch (" + pNOItem->parent()->text(0) + ")";
}
else{
//pNOItem->parent()->setText(0,str);
str = dataWatchName + " (" + pNOItem->parent()->text(0) + ")";
}
pNOItem->parent()->setText(0,str);*/
}
}
if(SystemInfoObj.contains("dataWatchNo"))
{
QJsonValue Json_value = SystemInfoObj.take("dataWatchNo");
//qDebug()<<"dataWatchNo ="<<Json_value.toString();
if(pNOItem)
{
dataWatchNo = Json_value.toString();
{
QString str = pNOItem->text(0) + ": " + Json_value.toString();
//pNOItem->setText(0,str);
pNOItem->setData(0, NO_ROLE, Json_value.toString());
}
}
}
if(SystemInfoObj.contains("deviceType"))
{
QJsonValue Json_value = SystemInfoObj.take("deviceType");
// qDebug()<<"deviceType ="<<Json_value.toString();
deviceType = Json_value.toString();
}
QString tablename = "t_Device";
QString update = QString("DeviceName = ") + "'" + dataWatchName + "'," + "DeviceType = " + "'" + deviceType +"'" ;
QString wherecol = QString(" DeviceMac = ") + "'" + dataWatchNo + "'";
sql_db.UpdataDataCol(tablename,update,wherecol);
if(SystemInfoObj.contains("serialNumber"))
{
QJsonValue Json_value = SystemInfoObj.take("serialNumber");
//qDebug()<<"serialNumber ="<<Json_value.toString();
}
if(SystemInfoObj.contains("softVersion"))
{
QJsonValue Json_value = SystemInfoObj.take("softVersion");
//qDebug()<<"softVersion ="<<Json_value.toString();
}
if(SystemInfoObj.contains("timezone"))
{
QJsonValue Json_value = SystemInfoObj.take("timezone");
//qDebug()<<"timezone ="<<Json_value.toString();
}
}
}
}
}
m_pNetMgr->RequestFileList(sAddr);//等获取完终端MAC后再获取dat文件信息
}
void MainWidget::paraseChannelInfo(QString sAddr,const QVariant& msg)
{
QTreeWidgetItem *pNOItem = findNOItemByIP(sAddr);
}
void MainWidget::addChildItem(QTreeWidgetItem *pDataItem,QTreeWidgetItem *pNoItem, QString sfileName, int iTime)
{
if(!pDataItem && !pNoItem) return;
int iCount = pDataItem->childCount();
QString strNo = pNoItem->data(0,NO_ROLE).value<QString>();
QTreeWidgetItem *pChangeItem = nullptr;
QTreeWidgetItem *pSizeItem = nullptr;
QTreeWidgetItem *pTimeItem = nullptr;
QTreeWidgetItem *pManulItem = nullptr;
QString datpath = "";
QString filename = "";
for (int i = 0; i < iCount; ++i)
{
QTreeWidgetItem *pItem = pDataItem->child(i);
QString strFlag = pItem->data(0, FLAG_ROLE).value<QString>();
if("change" == strFlag)
{
pChangeItem = pItem;
}
else if ("size" == strFlag)
{
pSizeItem = pItem;
}
else if ("time" == strFlag)
{
pTimeItem = pItem;
}
else if ("manu" == strFlag)
{
pManulItem = pItem;
}
}
QTreeWidgetItem *pNewItem = new QTreeWidgetItem();
pNewItem->setCheckState(0, Qt::Unchecked);
pNewItem->setText(0, sfileName);
pNewItem->setData(0, FLAG_ROLE, "file");
QDateTime datetime = QDateTime::fromSecsSinceEpoch(iTime);
QString sTime = datetime.toString("yyyy/MM/dd hh:mm");
pNewItem->setText(1, sTime);
if(sfileName.contains("NONE"))
{
pNewItem->setText(2, QStringLiteral("正常"));
}
else if(sfileName.contains("ALARM"))
{
pNewItem->setText(2, QStringLiteral("警告"));
}
else if(sfileName.contains("DANGER"))
{
pNewItem->setText(2, QStringLiteral("危险"));
}
//分类
if(sfileName.contains("MANUAL"))
{
datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNo + "\\" + "manu" + "\\";
filename = datpath + sfileName;
QFileInfo file(filename);
if(file.exists()){
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,0);
pManulItem->addChild(pNewItem);
}else{
QIcon icon(":/images/images/imgTreeIcon/remove2.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,0);
pManulItem->addChild(pNewItem);
}
}
else if (sfileName.contains("TIME_INTERVAL") || sfileName.contains("TIME_OF_DAY") || sfileName.contains("MinIO"))
{
datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNo + "\\" + "time" + "\\";
filename = datpath + sfileName;
QFileInfo file(filename);
if(file.exists()){
}else{
QIcon icon(":/images/images/imgTreeIcon/remove2.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,0);
pTimeItem->addChild(pNewItem);
}
}
else if (sfileName.contains("DELTA_EU") || sfileName.contains("DELTA_SPPEED"))
{
datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNo + "\\" + "change" + "\\";
filename = datpath + sfileName;
QFileInfo file(filename);
if(file.exists()){
}else{
QIcon icon(":/images/images/imgTreeIcon/remove2.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,0);
pChangeItem->addChild(pNewItem);
}
}
else if (sfileName.contains("LEVEL-ALARM")|| sfileName.contains("LEVEL-DANGER"))
{
datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNo + "\\" + "size" + "\\";
filename = datpath + sfileName;
QFileInfo file(filename);
if(file.exists()){
pSizeItem->addChild(pNewItem);
}else{
QIcon icon(":/images/images/imgTreeIcon/remove2.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,0);
pSizeItem->addChild(pNewItem);
}
}
}
void MainWidget::TabBarCloseSlot()
{
QPushButton *pBtn = dynamic_cast<QPushButton *>(QObject::sender());
if(!pBtn) return;
ChildForm *pForm = m_mapTabBtnToForm.value(pBtn);
if(!pForm) return;
m_mapTabBtnToForm.remove(pBtn);
if(m_vecChildForm.contains(pForm)) m_vecChildForm.remove(m_vecChildForm.indexOf(pForm));
if(m_mapChildFormToChannelID.contains(pForm)) m_mapChildFormToChannelID.remove(pForm);
ui->tabWidget->removeTab( ui->tabWidget->indexOf(pForm));
}
void MainWidget::PlayBtnSlot()
{
if(!m_pTimer) return;
{
m_pTimer->stop();
ui->PauseBtn->setToolTip(tr("暂停"));
}
}
void MainWidget::TimerSlot()
{
if(m_iCurCount == m_iCount || m_iCurCount == m_iRealCount)
{
m_iCurCount = m_iCount;
ui->horizontalSlider->setValue(m_iCurCount);
m_pTimer->stop();
return;
}
ui->horizontalSlider->setValue(m_iCurCount);
if(m_backPlay)
m_iCurCount --;
else
m_iCurCount ++;
}
void MainWidget::Back1SBtnSlot()
{
m_backPlay = true;
m_iCurCount -= 1;
if(m_iCurCount >= m_iRealCount)
m_iCurCount = m_iRealCount;
if(m_iCurCount < 0)
{
m_iCurCount = 0;
}
m_pTimer->start(1000);
ui->horizontalSlider->setValue(m_iCurCount);
}
void MainWidget::Back2SBtnSlot()
{
m_iCurCount -= 1;
if(m_iCurCount >= m_iRealCount)
m_iCurCount = m_iRealCount;
if(m_iCurCount < 0)
{
m_iCurCount = 0;
}
m_pTimer->stop();
ui->horizontalSlider->setValue(m_iCurCount);
}
void MainWidget::Back3SBtnSlot()
{
m_iCurCount = 0;
m_pTimer->stop();
ui->horizontalSlider->setValue(m_iCurCount);
}
void MainWidget::Add1SBtnSlot()
{
m_backPlay = false;
if(m_iCurCount > m_iCount)
{
m_iCurCount = m_iCount;
}
if(m_iCurCount > m_iRealCount)
m_iCurCount = m_iRealCount;
m_pTimer->start(1000);
ui->horizontalSlider->setValue(m_iCurCount);
}
void MainWidget::Add2SBtnSlot()
{
m_iCurCount += 1;
if(m_iCurCount > m_iCount)
{
m_iCurCount = m_iCount;
}
if(m_iCurCount > m_iRealCount)
m_iCurCount = m_iRealCount;
m_pTimer->stop();
ui->horizontalSlider->setValue(m_iCurCount);
}
void MainWidget::Add3SBtnSlot()
{
if(m_iRealCount < m_iCount)
m_iCurCount = m_iRealCount;
else
m_iCurCount = m_iCount;
m_pTimer->stop();
ui->horizontalSlider->setValue(m_iCurCount);
}
void MainWidget::AddDevice()
{
pAddDevice = new AddDeviceForm(this); //将类指针实例化
connect(pAddDevice, SIGNAL(AddDeviceIP(QString,bool)), this, SLOT(SearchSlot(QString,bool)));
connect(pAddDevice, SIGNAL(AutoSearchIP()), this, SLOT(SearchSlot()));
pAddDevice->setWindowModality(Qt::ApplicationModal);
pAddDevice->show();
}
void MainWidget::Report()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
if(m_mapChildFormToChannelID.size() > 3){
MyMsgBox(QMessageBox::Warning,"警告","最大支持三张图谱导出报告!");
return;
}
pReport = new ReportForm(this); //将类指针实例化
pReport->setWindowModality(Qt::ApplicationModal);
connect(pReport, SIGNAL(ReportPDF(QStringList,QString)), this, SLOT(OutPDF(QStringList,QString)));
QDateTime current_date_time = QDateTime::currentDateTime();
QString current_date = current_date_time.toString("yyyy-MM-dd");
QString ReportFile = QCoreApplication::applicationDirPath() + "\\report\\" + m_sEquipNo + "_" + current_date + ".pdf";
QDateTime time = QDateTime::fromTime_t(m_strCollectTime.toUInt());
REPORT_INFO reportInfo;
QStringList strImagePathList;
QMap<ChildForm *, QVector<QString>>::const_iterator mapIt = m_mapChildFormToChannelID.begin();
for (; mapIt != m_mapChildFormToChannelID.end(); ++mapIt)
{
ChildForm *pChild = mapIt.key();
QString strImagePath = "";
QPixmap pixmap = pChild->GetSerise(strImagePath);
strImagePathList.push_back(strImagePath);
qDebug() << strImagePath<< endl;
}
reportInfo.DeviceMac = m_sEquipNo;
reportInfo.DevicemCollectTime = time.toString("yyyy-MM-dd hh:mm:ss");
pReport->InitReport(ReportFile,strImagePathList,m_sEquipNo + "_" + current_date + ".pdf",reportInfo);
pReport->show();
}
void MainWidget::InitData()
{
setWindowTitle("Chaos Data Player");
m_iCurCount = 0;
m_iCount = 0;
ui->horizontalSlider->setValue(0);
QString strCount = QString("%1/%2").arg(m_iCurCount).arg(m_iCount);
ui->label_value->setText(strCount);
ui->tabWidget->clear();
m_vecGroupdata.clear();
m_vecWaveInfo.clear();
QVector<GroupData>().swap(m_vecGroupdata);
QVector<WAVE_INFO>().swap(m_vecWaveInfo);
QVector<WAVE_ALLDATA>().swap(m_vecAllData);
QMap<QString,QVector<WAVE_DATA>>::Iterator iter1 = mapWaveData.begin();
for(iter1 = mapWaveData.begin();iter1 != mapWaveData.end();iter1++){
QVector<WAVE_DATA>().swap(iter1.value());
mapWaveData.erase(iter1);
}
QMap<ChildForm *, QVector<QString>>::Iterator iter2 = m_mapChildFormToChannelID.begin();
for(;iter2 != m_mapChildFormToChannelID.end();iter2++){
QVector<QString>().swap(iter2.value());
m_mapChildFormToChannelID.erase(iter2);
}
ui->horizontalSlider->setRange(0,0);
m_pTimer->stop();
}
void MainWidget::ExitFile()
{
if(mapWaveData.size() < 1)
return;
QMessageBox::StandardButton Msg = MyMsgBox(QMessageBox::Question,"提示","是否退出当前Dat文件",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
if(Msg == QMessageBox::No)
return;
InitData();
EnableGraph(true);
}
void MainWidget::Setting()
{
pSetting = new SettingForm(this);
pSetting->show();
}
void MainWidget::HideDev()
{
QList<int> m_splitterLengths(ui->splitter->sizes());
if(!m_HideDevList){
m_HideDevList = true;
m_splitterLengths[0] = 0;
ui->splitter->setSizes(m_splitterLengths);
}else{
m_HideDevList = false;
m_splitterLengths[0] = 200;
m_splitterLengths[1] = 500;
ui->splitter->setSizes(m_splitterLengths);
}
}
void MainWidget::OutPDF(QStringList strResult,QString filePath)
{
QFile pdfFile(filePath);
qDebug() << filePath<<endl;
if(!pdfFile.open(QIODevice::WriteOnly))
{
qDebug() << "open pdf error"<<endl;
return;
}
QDateTime current_date_time = QDateTime::currentDateTime();
QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm:ss");
QPdfWriter *pdfWriter = new QPdfWriter(&pdfFile); //实例化QPdfWriter
pdfWriter->setPageSize(QPagedPaintDevice::A4); // 设置纸张为A4
pdfWriter->setResolution(300); // 设置纸张的分辨率为300,因此其像素为3508X2479
int iMargin = 60; // 页边距
pdfWriter->setPageMargins(QMarginsF(iMargin, iMargin, iMargin, iMargin));
QPainter* pPdfPainter = new QPainter(pdfWriter); // qt绘制工具
// 标题,居中
QTextOption option(Qt::AlignHCenter | Qt::AlignVCenter);
option.setWrapMode(QTextOption::WordWrap);
//字体
QFont font;
font.setFamily(QString::fromLocal8Bit("宋体"));
//标题,字号
int fontSize = 22;
font.setPointSize(fontSize);
pPdfPainter->setFont(font); // 为绘制工具设置字体
pPdfPainter->drawText(QRect(0, 0, 1980, 100),Qt::AlignHCenter|Qt::AlignBottom, "故障分析诊断报告");
/* int w = 200, h = 200;
QPixmap watermask = CreateWatermarkBg(w,h, QString("chaos"));
float imgDisScale = 1.0;
pPdfPainter->drawPixmap(QRect(0, 0, 500,300), watermask);*/
// 标题下边留白
int iTop = 350;
// 左侧缩进
int iLeft = 20;
pPdfPainter->drawRect(iLeft, iTop, 1980, 2750);//表格矩形方框
pPdfPainter->drawLine(iLeft,iTop+100,iLeft+1980,iTop+100);
pPdfPainter->drawLine(iLeft,iTop+800,iLeft+1980,iTop+800);
//pPdfPainter->drawLine(iLeft,iTop+1000,iLeft+1980,iTop+1000);
//pPdfPainter->drawLine(300,iTop,300,iTop+2750);
/******************************************************以下为自定义绘图**************************************/
QPixmap pixmap(":/images/images/logo.png");
pixmap = pixmap.scaled(200, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation); // 按比例缩放
pPdfPainter->drawPixmap(1800,10,pixmap);
pPdfPainter->setFont(QFont("", 10));
pPdfPainter->drawText(20,250,"终端名称Data Watch");
pPdfPainter->drawText(500,250,"终端MAC");
pPdfPainter->drawText(700,250,m_sEquipNo);
//pPdfPainter->drawText(1000,180,"采集通道:");
//pPdfPainter->drawText(20,250,"通道名称:");
//pPdfPainter->drawText(500,250,"测点名称:");
pPdfPainter->drawText(1000,250,"采集时间:");
QDateTime time = QDateTime::fromTime_t(m_strCollectTime.toUInt());
pPdfPainter->drawText(1200,250,time.toString("yyyy-MM-dd hh:mm:ss"));
//pPdfPainter->drawText(iLeft+50,iTop+60,"诊断项目");
pPdfPainter->drawText(iLeft+900,iTop+60,"诊断结果");
pPdfPainter->drawText(iLeft+50,iTop+850,"诊断结果及建议:");
for(int i = 0; i < strResult.size();i++){
pPdfPainter->drawText(iLeft+50,iTop+915 + i * 70,strResult[i]);
}
QString ReportTime = QStringLiteral("报告时间:%1").arg(current_date);
pPdfPainter->drawText(20,320,ReportTime);
QMap<ChildForm *, QVector<QString>>::const_iterator mapIt = m_mapChildFormToChannelID.begin();
for (int i = 0; mapIt != m_mapChildFormToChannelID.end(); ++mapIt,i++)
{
ChildForm *pChild = mapIt.key();
switch(pChild->m_iFormType){
case FormType::TrendChartPlot:
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"趋势图");
pPdfPainter->setPen(QColor(0,255,0));
//pPdfPainter->drawLine(iLeft+290 + i * 610,iTop+650,iLeft+350 + i * 610,iTop+650);
break;
case FormType::TimeDomainPlot:
pPdfPainter->setPen(QColor(0,0,0));
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"时域图");
break;
case FormType::FrequencyDomainPlot:
pPdfPainter->setPen(QColor(0,0,0));
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"频谱图");
break;
case FormType::EnvChartPlot:
pPdfPainter->setPen(QColor(0,0,0));
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"包络图");
break;
case FormType::OrbitPlot:
pPdfPainter->setPen(QColor(0,0,0));
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"轴心轨迹图");
break;
case FormType::WaterFallPlot:
pPdfPainter->setPen(QColor(0,0,0));
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"瀑布图");
break;
case FormType::PolarPlot:
pPdfPainter->setPen(QColor(0,0,0));
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"极坐标图");
break;
case FormType::ShaftCenterline:
pPdfPainter->setPen(QColor(0,0,0));
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"轴心位置图");
break;
case FormType::BodePlot:
pPdfPainter->setPen(QColor(0,0,0));
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"伯德图");
break;
default:
break;
}
QString strImagePath = "";
QPixmap pixmap = pChild->GetSerise(strImagePath);
pPdfPainter->drawPixmap(iLeft+80 + i * 610,iTop+120,pixmap);
}
// QPixmap pixmap=QWidget::grab(QRect(ui->widget->x(),ui->widget->y(),ui->widget->frameGeometry().width(),ui->widget->frameGeometry().height()));
delete pPdfPainter;
pdfFile.close();
QDesktopServices::openUrl(QUrl::fromLocalFile(filePath));
}
QPixmap MainWidget::CreateWatermarkBg(uint16_t w, uint16_t h, QString content)
{
QPixmap pm(w,h);//一张新空图
pm.fill(Qt::transparent);//用透明色填充
QPainter painter(&pm);
int fontSize = 25/*25*/, spacing = 5;
QFont font("Ubuntu", fontSize, QFont::Thin);
font.setLetterSpacing(QFont::AbsoluteSpacing, spacing);
painter.setFont(font);
painter.setPen(QColor(200, 200, 200));
painter.translate(pm.width() / 2, -pm.width() / 2);//调整位置
QFontMetricsF fontMetrics(font);
qreal font_w = fontMetrics.width(content);
qreal font_h = fontMetrics.height();
qreal ang = 45.0;
painter.rotate(ang);
int project_Y = pm.width() * sin(ang) + pm.height() * sin(ang);//原图像Y坐标在新坐标系Y轴上的投影长度。
int project_X = pm.height()*sin(ang) + pm.width()*cos(ang);//原图像x坐标在新坐标系x轴上的投影长度。
int x_step = 1.5*font_w + 3*spacing; //在新坐标系X轴上的间距
int y_step = (3*font_h);
int rowCnt = project_Y / y_step + 1; //在新坐标系下写多少行
int colCnt = project_X / x_step; //在新坐标系下写多少列
for (int r = 0; r < rowCnt; r++)//在新坐标系下写多少行
{
for (int c = 0; c < colCnt + 1; c++)//在新坐标系下写多少列
{
painter.drawText(x_step * c, y_step * r,content);
}
}
return pm;
}
void MainWidget::SlidervalueChangedSlot(int value)
{
m_iCurCount = value;
QString strCount = QString("%1/%2").arg(m_iCurCount).arg(m_iCount);
ui->label_value->setText(strCount);
QMap<ChildForm *, QVector<QString>>::const_iterator mapIt = m_mapChildFormToChannelID.begin();
for (; mapIt != m_mapChildFormToChannelID.end(); ++mapIt)
{
ChildForm *pChild = mapIt.key();
QVector<QString> vecChannel = mapIt.value();
if( pChild->GetFormType() == TimeDomainPlot
|| pChild->GetFormType() == SpecChartPlot
|| pChild->GetFormType() == OrbitPlot
|| pChild->GetFormType() == WaterFallPlot
)
{//频域图,时域图,包络图,频谱图,
pChild->handlePlayWave((value-1)*1,1);
}else if(pChild->GetFormType() == TrendChartPlot){
pChild->handlePlayWave((value-1)*1,5);
}else if(pChild->GetFormType() == FrequencyDomainPlot ||
pChild->GetFormType() == EnvChartPlot){
pChild->handlePlayWave((value-1)*1,1);
}
}
}
void MainWidget::ItemCheckStateSlot(QString strID, bool bChecked)
{
ChildForm *pChild = dynamic_cast<ChildForm *>(QObject::sender());
if(!pChild) return;
QVector<QString> vecChannel;
if(m_mapChildFormToChannelID.contains(pChild)) vecChannel = m_mapChildFormToChannelID.value(pChild);
if(vecChannel.contains(strID))
{
if(!bChecked) vecChannel.remove(vecChannel.indexOf(strID));
}
else
{
if(bChecked) vecChannel.push_back(strID);
}
m_mapChildFormToChannelID[pChild] = vecChannel;
if(!bChecked) return;
if(pChild->GetFormType() == FrequencyDomainPlot || pChild->GetFormType() == TimeDomainPlot
|| pChild->GetFormType() == EnvChartPlot || pChild->GetFormType() == SpecChartPlot
|| pChild->GetFormType() == TrendChartPlot || pChild->GetFormType() == WaterFallPlot)
{//频域图,时域图,包络图,频谱图
QString strChannelID = strID;
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); ++iter)
{
if((iter.key() == strChannelID))
{
// pChild->m_waveData = stData;
qDebug() << "m_vecPushData" << iter.value().size() << endl;
pChild->AddSeries(strChannelID, iter.value());
}
}
}
else if (pChild->GetFormType() == OrbitPlot) //轴心轨迹
{
QString strChannelID = strID;
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
QVector<WAVE_DATA> waveData;
QString ChannelID = "",speedChannelID = "";
for (; iter != mapWaveData.end(); ++iter)
{
if((iter.key() == strChannelID))
{
waveData = iter.value();
ChannelID = iter.value().at(0).pairChannelID;
speedChannelID = iter.value().at(0).speedRefChannelId;
QString strChannelType = iter.value().at(0).sensorType;
if(strChannelType != "PROXIMETER")
return;
qDebug() << "speedChannelID" << speedChannelID << endl;
qDebug() << "ChannelID" << ChannelID << endl;
qDebug() << "size" << mapWaveData[ChannelID].size() << endl;
if(speedChannelID == "NONE" || speedChannelID == ""){
MyMsgBox(QMessageBox::Warning,"警告","当前文件中没有转速通道数据");
return;
}
pChild->AddOrbitSeries(strChannelID, mapWaveData[ChannelID],iter.value(),mapWaveData[speedChannelID]);
}
/*if((iter.key() == strChannelID))
{
waveData = iter.value();
ChannelID = iter.value().at(0).pairChannelID;
speedChannelID = iter.value().at(0).SpeedProfileSpeed;
}else{
if(ChannelID == iter.key()){
pChild->AddOrbitSeries(strChannelID, waveData,iter.value());
break;
}
}*/
}
}else if(pChild->GetFormType() == BodePlot){
QString strChannelID = strID;
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); ++iter){
if((iter.key() == strChannelID)){
pChild->mapBodeData.insert(strID,iter.value());
if(pChild->mapBodeData.size() < 2){
QString ChannelID = iter.value().at(0).speedRefChannelId;
if(ChannelID == "NONE" || ChannelID == ""){
MyMsgBox(QMessageBox::Warning,"警告","当前文件中没有绑定转速通道,请手动选择另一个通道");
//return;
}else{
pChild->mapBodeData.insert(strID,mapWaveData[ChannelID]);
pChild->AddBodeSeries(strChannelID, iter.value(),mapWaveData[ChannelID]);
return;
}
}else{
QVector<WAVE_DATA> waveSpeedData; //转速
QVector<WAVE_DATA> waveVibrateData; //加速度
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = pChild->mapBodeData.begin();
for (;iter != pChild->mapBodeData.end() ; iter++) {
if(iter.value()[0].sensorType != "ACCELEROMETER" && iter.value()[0].sensorType != "TACHOMETER"){
MyMsgBox(QMessageBox::Warning,"警告","请选择转速和振动通道进行伯德图分析");
return;
}
if(iter.value()[0].sensorType == "TACHOMETER"){
waveSpeedData = iter.value();
}
if(iter.value()[0].sensorType == "ACCELEROMETER"){//ACCELEROMETER
waveVibrateData = iter.value();
}
}
pChild->AddBodeSeries(strChannelID, waveVibrateData,waveSpeedData);
}
}
}
}else if(pChild->GetFormType() == ShaftCenterline){//2个位移
QString strChannelID = strID;
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); ++iter){
if((iter.key() == strChannelID)){
QString ChannelID = iter.value().at(0).pairChannelID;
QString ChannelType = iter.value().at(0).sensorType;
if((ChannelType != "PROXIMETER") && (ChannelID == "NONE" || ChannelID == "")){
MyMsgBox(QMessageBox::Warning,"警告","请选择径向位移通道");
return;
}
pChild->AddShaftCenterlineSeries(strChannelID, iter.value(),mapWaveData[ChannelID]);
}
}
}else if(pChild->GetFormType() == PolarPlot){
QString strChannelID = strID;
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
QVector<WAVE_DATA> waveData;
QString speedChannelID = "";
for (; iter != mapWaveData.end(); ++iter){
if((iter.key() == strChannelID)){
speedChannelID = iter.value().at(0).speedRefChannelId;
qDebug() << "speedChannelID"<<speedChannelID << endl;
QString strChannelType = iter.value().at(0).sensorType;
if(strChannelType != "PROXIMETER")
return;
if(speedChannelID == "NONE" || speedChannelID == ""){
MyMsgBox(QMessageBox::Warning,"警告","当前文件中没有转速通道数据");
return;
}
pChild->AddPolarPlotSeries(strChannelID, mapWaveData[strChannelID],mapWaveData[speedChannelID]);
}
}
}
}
void MainWidget::OutSlot()
{
ChildForm *pChild = dynamic_cast<ChildForm *>(QObject::sender());
if(!pChild) return;
int index = ui->tabWidget->indexOf(pChild);
if(index == -1) return;
ui->tabWidget->removeTab(index);
pChild->setParent(this);
pChild->setWindowFlag(Qt::Window);
pChild->show();
pChild->setTopWgtHiddent(false);
}
void MainWidget::ReturnSlot()
{
ChildForm *pChild = dynamic_cast<ChildForm *>(QObject::sender());
if(!pChild) return;
int index = ui->tabWidget->indexOf(pChild);
if(index > -1) return;
pChild->setTopWgtHiddent(true);
QIcon icon("");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::TrendChartPlotSlot()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
ChildForm *pChild = new ChildForm(FormType::TrendChartPlot,tr("趋势图"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("趋势图"));
pChild->SetFormType(FormType::TrendChartPlot);
QIcon icon(":/images/images/imgDatamodel/M1.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
// connect(pChild, &ChildForm::sigRealTimeData, this, &MainWidget::slotRealTimeData);
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size()>8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::TimeDomainPlotSlot()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
ChildForm *pChild = new ChildForm(FormType::TimeDomainPlot,tr("时域图"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("时域图"));
pChild->SetFormType(FormType::TimeDomainPlot);
QIcon icon(":/images/images/imgDatamodel/M2.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
connect(pChild, SIGNAL(PlayWaveSig()), this, SLOT(Add2SBtnSlot()));
connect(pChild, SIGNAL(InitWaveSig()), this, SLOT(Back3SBtnSlot()));
// connect(pChild, &ChildForm::sigRealTimeData, this, &MainWidget::slotRealTimeData);
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size()>8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::FrequencyDomainPlotSlot()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
ChildForm *pChild = new ChildForm(FormType::FrequencyDomainPlot,tr("频域图"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("频域图"));
pChild->SetFormType(FormType::FrequencyDomainPlot);
QIcon icon(":/images/images/imgDatamodel/M9.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
// connect(pChild, &ChildForm::sigRealTimeData, this, &MainWidget::slotRealTimeData);
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size()>8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::EnvelopeAnalysisPlotSlot()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
ChildForm *pChild = new ChildForm(FormType::EnvChartPlot,tr("包络图"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("包络图"));
pChild->SetFormType(FormType::EnvChartPlot);
QIcon icon(":/images/images/imgDatamodel/M10.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
// connect(pChild, &ChildForm::sigRealTimeData, this, &MainWidget::slotRealTimeData);
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size()>8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::WaterFallPlotSlot()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
ChildForm *pChild = new ChildForm(FormType::WaterFallPlot,tr("瀑布图"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("瀑布图"));
pChild->SetFormType(FormType::WaterFallPlot);
QIcon icon(":/images/images/imgDatamodel/M4.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
// connect(pChild, &ChildForm::sigRealTimeData, this, &MainWidget::slotRealTimeData);
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size()>8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
// Child3DFrom *pChild3d = new Child3DFrom(this);
// pChild3d->setCloseBtnVisible(false);
// pChild3d->hideTopWgt();
//// pChild->SetName(tr("包络图"));
//// pChild->SetFormType(FormType::EnvChartPlot);
// QIcon icon(":/images/images/imgDatamodel/M4.png");
// ui->tabWidget->addTab(pChild, icon, "瀑布图");
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::BodePlotSlot()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
ChildForm *pChild = new ChildForm(FormType::BodePlot,tr("Bode"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("伯德图"));
pChild->SetFormType(FormType::BodePlot);
QIcon icon(":/images/images/imgDatamodel/M5.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size()>8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::OrbitPlotSlot()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
ChildForm *pChild = new ChildForm(FormType::OrbitPlot,tr("轴心轨迹图"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("轴心轨迹图"));
pChild->SetFormType(FormType::OrbitPlot);
QIcon icon(":/images/images/imgDatamodel/M7.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
// connect(pChild, &ChildForm::sigRealTimeData, this, &MainWidget::slotRealTimeData);
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size()>8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::ShaftCenterlinePlotSlot()
{
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
return;
}
ChildForm *pChild = new ChildForm(FormType::ShaftCenterline,tr("轴心位置图"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("轴心位置图"));
pChild->SetFormType(FormType::ShaftCenterline);
QIcon icon(":/images/images/imgDatamodel/M6.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
// connect(pChild, &ChildForm::sigRealTimeData, this, &MainWidget::slotRealTimeData);
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size()>8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::PolarplotSlot()
{
ChildForm *pChild = new ChildForm(FormType::PolarPlot,tr("极坐标"),&m_DeviceInfo,this);
pChild->setCloseBtnVisible(true);
pChild->hideTopWgt();
pChild->SetName(tr("极坐标"));
pChild->SetFormType(FormType::PolarPlot);
QIcon icon(":/images/images/imgDatamodel/M8.png");
ui->tabWidget->addTab(pChild, icon, pChild->GetName());
//pChild->AddPolarPlotSeries();
QPushButton *pCustomButton = new QPushButton();
pCustomButton->setFixedSize(14, 14);
pCustomButton->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/tabclose.png) 5; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/tabclose-h.png) 5; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/tabclose-p.png) 5; }");
((QTabBar*)(ui->tabWidget->tabBar()))->setTabButton(ui->tabWidget->indexOf(pChild),QTabBar::RightSide,pCustomButton);
connect(pCustomButton, SIGNAL(clicked()), this, SLOT(TabBarCloseSlot()));
m_mapTabBtnToForm[pCustomButton] = pChild;
connect(pChild, SIGNAL(OutSig()), this, SLOT(OutSlot()));
connect(pChild, SIGNAL(ReturnSig()), this, SLOT(ReturnSlot()));
connect(pChild, SIGNAL(ItemCheckStateSignal(QString, bool)), this, SLOT(ItemCheckStateSlot(QString, bool)));
// connect(pChild, &ChildForm::sigRealTimeData, this, &MainWidget::slotRealTimeData);
m_vecChildForm.push_back(pChild);
QStringList strIDList,strChannleType,strChannleNameList;
// QVector<WAVE_DATA>::Iterator iter = m_vecPushData.begin();
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
for (; iter != mapWaveData.end(); iter ++)
{
if(!strIDList.contains(iter.key()))
strIDList.push_back(iter.key());
strChannleType.push_back(iter.value()[0].sensorType);
strChannleNameList.push_back(iter.value()[0].channelName);
}
if(mapWaveData.size() > 8)
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
else
pChild->SetDataIDs(strIDList, tr("Data Watch "),strChannleType,strChannleNameList);
ui->tabWidget->setCurrentWidget(pChild);
}
void MainWidget::View3D()
{
/* Child3DFrom *pChild = new Child3DFrom(this);
QIcon icon(":/images/images/imgDatamodel/M7.png");
ui->tabWidget->addTab(pChild, icon, "");*/
}
void MainWidget::Dat2Csv()
{
QString dirpath = QFileDialog::getExistingDirectory(this, QStringLiteral("选择目录"), "./", QFileDialog::ShowDirsOnly);
if(dirpath.isEmpty()) return;
if(mapWaveData.size() < 1){
MyMsgBox(QMessageBox::Information,"提示","请先打开数据文件!");
return;
}
QProgressDialog *progressDialog = new QProgressDialog(this);
//QFont font("ZYSong18030", 12);
//progressDialog->setFont(font);
progressDialog->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
progressDialog->setWindowModality(Qt::WindowModal);
progressDialog->setWindowTitle(tr("Please Wait"));
progressDialog->setLabelText(tr("转换中..."));
progressDialog->setCancelButton(0);
progressDialog->show();
qDebug() <<"mapWaveData.size()" <<mapWaveData.size() << endl;
WAVE_DATA waveData;
QVector<WAVE_DATA> vecWaveData;
QVector<WAVE_DATA> vecWaveData128;
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = mapWaveData.begin();
QString dirName = dirpath + "\\" + m_sEquipNo + "\\";
QDir dir(dirName);
qDebug()<< "CVS = " << dirName << endl;
if(!dir.exists())
{
dir.mkpath(dirName);
}
int progress = 0;
progressDialog->setRange(0, mapWaveData.size());
for (; iter != mapWaveData.end(); iter ++){
progressDialog->setValue(progress);
if (progressDialog->wasCanceled())
{
delete progressDialog;
return ;
}
QDateTime time = QDateTime::fromTime_t(m_strCollectTime.toUInt());
QString DevicemCollectTime = time.toString("yyyy-MM-dd_hhmmss");
QString filename = QString(dirName + "%1-%2-%3.csv").arg(iter.key()).arg(iter.value().at(0).sensorType).arg(DevicemCollectTime);
QFile file(filename);
qDebug()<< "filename = "<<filename << endl;
if (!file.open(QIODevice::WriteOnly))
{
MyMsgBox(QMessageBox::Information,"提示","请先打开数据文件!");
return;
}
QTextStream out(&file); // 输入流
if(iter.value().size() == 0)
continue;
if(iter.value().at(0).sensorType == "TACHOMETER"){
qDebug() <<"vecWaveData.size()" <<iter.value().size() << endl;
#ifndef SAVE_SPEEDTIME
for(int i = 0; i < iter.value().size();i++){
/*if(i >= iter.value().at(0).Time){
QVector<float> vecSpeed;
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
vecSpeed.push_back(iter.value().at(i).waveData[k]);
// out << iter.value().at(i).waveData[k] << ",";
// out << "\n";
}
qDebug() <<"vecSpeed" << vecSpeed.size() << endl;
float timeTemp = 0;
for (int i = 1; i < vecSpeed.size(); i++) {
timeTemp = (vecSpeed[i] - vecSpeed[i-1]) + timeTemp;
}
timeTemp = timeTemp / (vecSpeed.size() - 1);
float mSpeedProfileSpeed = (1 / timeTemp * 60) / (iter.value().at(i).iKeyCount); // 计算转速
qDebug() <<"mSpeedProfileSpeed" <<mSpeedProfileSpeed<< endl;
out << mSpeedProfileSpeed << ",";
out << "\n";
}else*/
{
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
out << iter.value().at(i).waveData[k] << ",";
out << "\n";
}
}
}
#else SAVE_SPEEDTIME
for(int i = 0; i < iter.value().size();i++){
{
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
out << iter.value().at(i).waveData[k] << ",";
out << "\n";
}
}
}
#endif
}else if(iter.value().at(0).sensorType == "ACCELEROMETER"){
qDebug() <<"iter.key()" <<iter.key() << endl;
for(int i = 0; i < iter.value().size();i++){
for (int k = 0 ; k < iter.value().at(i).waveData.size() ; k++) {
out << iter.value().at(i).waveData[k] << ",";
out << "\n";
}
}
}
else if(iter.value().at(0).sensorType == "THRUST"){
qDebug() <<"iter.key()" <<iter.key() << endl;
for(int i = 0; i < iter.value().size();i++){
qDebug() <<"THRUST iter.size()" <<iter.value().at(i).waveData.size() << endl;
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
out << iter.value().at(i).waveData[k]<< ",";
out << "\n";
}
}
}
else if(iter.value().at(0).sensorType == "VELOCITY"){
qDebug() <<"iter.key()" <<iter.key() << endl;
for(int i = 0; i < iter.value().size();i++){
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
out << iter.value().at(i).waveData[k]<< ",";
out << "\n";
}
}
}
else if(iter.value().at(0).sensorType == "SLOW_CURRENT"){
qDebug() <<"iter.key()" <<iter.key() << endl;
for(int i = 0; i < iter.value().size();i++){
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
out << iter.value().at(i).waveData[k] << ",";
out << "\n";
}
}
}else if(iter.value().at(0).sensorType == "PROXIMETER"){
qDebug() <<"iter.key()" <<iter.key() << endl;
for(int i = 0; i < iter.value().size();i++){
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
out << iter.value().at(i).waveData[k] << ",";
out << "\n";
}
}
}else if(iter.value().at(0).sensorType == "FAST_VOLTAGE"){
qDebug() <<"iter.key()" <<iter.key() << endl;
for(int i = 0; i < iter.value().size();i++){
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
out << iter.value().at(i).waveData[k] << ",";
out << "\n";
}
}
}else if(iter.value().at(0).sensorType == "MICROPHONE"){
qDebug() <<"iter.key()" <<iter.key() << endl;
for(int i = 0; i < iter.value().size();i++){
for (int k = 0 ; k < iter.value().at(i).waveData.size(); k++) {
out << iter.value().at(i).waveData[k] << ",";
out << "\n";
}
}
}
progress++;
file.close();
}
delete progressDialog;
MyMsgBox(QMessageBox::Information,"提示","保存文件成功!");
}
void MainWidget::ReadCsvData(QString strPath)
{
QFile file(strPath);
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "::MainWidget::ReadDatData() cannot open file for read";
return;
}
QTextStream * out = new QTextStream(&file);//文本流
QStringList tempOption = out->readAll().split("\n");//每行以\n区分
qDebug() << "tempOption.count " << tempOption.count() << endl;
QStringList tempbar;
for(int i = 1 ; i < tempOption.count()-1 ; i++)
{
tempbar = tempOption.at(i).split(",");//一行中的单元格以,区分
for(int j = 0; j < tempbar.size();j++)
{
m_vecCsvData[j].wavedata.push_back(tempbar.at(j).toFloat());
m_vecCsvData[j].channelId = QString(j+1);
}
}
qDebug() << "tempbar " << m_vecCsvData[0].wavedata.at(0) << endl;
file.close();//
}
void MainWidget::ReadDatData(QString strPath,QString strFileName,QString strIP)
{
ui->tabWidget->clear();
InitData();
m_strIP = strIP;
m_strDatTime = strFileName.right(30);
m_strDatTime = m_strDatTime.left(26);
QString Tile = "Chaos Data Player @ " + strFileName;
setWindowTitle(Tile);
QFile file(strPath);
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "::MainWidget::ReadDatData() cannot open file for read";
return;
}
///转无线传感器的dat文件
///
// QString strFilePath = strPath.replace(strFileName,"");
// QStringList fileList = getFileListUnderDir(strFilePath);
// foreach (auto DatFileName, fileList)
// {
// char Time[32];
// QVector<float> vecDat;
// QFile file2(strFilePath + DatFileName);
// qDebug() << strFilePath + DatFileName;
// if (!file2.open(QIODevice::ReadOnly))
// {
// qDebug() << "::MainWidget::ReadDatData() cannot open file for read";
// return;
// }
// file2.read((char*)Time, sizeof(Time));
// while (!file2.atEnd()) {
// float f;
// file2.read((char *)&f, sizeof(f));
// vecDat.push_back(f);
// }
// DatFileName.replace(".dat",".csv");
// QString filename = "e:/CSV/" + DatFileName;
// QFile file1(filename);
// qDebug()<< "filename = "<<filename << endl;
// if (!file1.open(QIODevice::WriteOnly))
// {
// qDebug() << "::ToRpm cannot open file for read";
// return;
// }
// QTextStream out(&file1); // 输入流
// out << Time << ",";
// out << "\n";
// for(int i = 0; i < vecDat.size();i++){
// out << (float)vecDat[i] << ",";
// out << "\n";
// }
// file1.close();
// file2.close();
// }
// return;
///
QProgressDialog *progressDialog = new QProgressDialog(this);
progressDialog->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
progressDialog->setWindowModality(Qt::WindowModal);
progressDialog->setWindowTitle(tr("Please Wait"));
progressDialog->setLabelText(tr("读取中..."));
progressDialog->setCancelButton(0);
progressDialog->show();
QTime startTime = QTime::currentTime();
// qDebug() << "Vector 的 容量为1" << m_vecPushData.capacity() << endl;
qDebug() << "m_vecAllData 的 容量为2" << m_vecAllData.capacity() << endl;
m_vecGroupdata.clear();
m_vecWaveInfo.clear();
QVector<GroupData>().swap(m_vecGroupdata);
QVector<WAVE_INFO>().swap(m_vecWaveInfo);
QVector<WAVE_ALLDATA>().swap(m_vecAllData);
QMap<QString,QVector<WAVE_DATA>>::Iterator iter1 = mapWaveData.begin();
for(iter1 = mapWaveData.begin();iter1 !=mapWaveData.end();iter1++){
QVector<WAVE_DATA>().swap(iter1.value());
mapWaveData.erase(iter1);
}
QMap<ChildForm *, QVector<QString>>::Iterator iter2 = m_mapChildFormToChannelID.begin();
for(;iter2 != m_mapChildFormToChannelID.end();iter2++){
QVector<QString>().swap(iter2.value());
m_mapChildFormToChannelID.erase(iter2);
}
// qDebug() << "Vector 的 容量为2" << m_vecPushData.capacity() << endl;
qDebug() << "m_vecAllData 的 容量为2" << m_vecAllData.capacity() << endl;
// m_vecPushData.clear();
int theSize = 0; //通道数
//读12字节头文件
int iJsonSize, iChannelsize;
char equipNo[12]; //设备No 12字节
char time[10]; //数据起始时间 10字节
file.read((char*)&iChannelsize, sizeof(iChannelsize));
qDebug() << "::MainWidget::ReadDatData() Channelsize:" << iChannelsize;
int iCount; //存储dat文件原始数据秒数
file.read((char*)&iCount, sizeof(iCount));
qDebug() << "::MainWidget::ReadDatData() iCount:" << iCount;
file.read(equipNo, sizeof(equipNo));
QString sEquipNo(equipNo);
m_sEquipNo = sEquipNo.left(12);
qDebug() << "::MainWidget::ReadDatData() equipNo:" << m_sEquipNo;
file.read(time, sizeof(time));
QString CollectTime(time);
m_strCollectTime = CollectTime.left(10);
qDebug() << "::MainWidget::ReadDatData() time:" << m_strCollectTime;
file.read((char *)&iJsonSize, sizeof(iJsonSize));
qDebug() << "::MainWidget::ReadDatData() iJsonSize:" << iJsonSize;
//读json串
char *buf0 = (char *)malloc(sizeof(char) *iJsonSize);
file.read(buf0,iJsonSize);
/*QString filename1 = QString("e://json.txt");
QFile file1(filename1);
qDebug()<< "filename = "<<filename1 << endl;
if (!file1.open(QIODevice::WriteOnly))
{
qDebug() << "::ToRpm cannot open file for read";
return;
}
QTextStream out(&file1); // 输入流
out << buf0 ;*/
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(buf0,&parseJsonErr);
if(!(parseJsonErr.error == QJsonParseError::NoError))
{
qDebug()<<tr("解析json文件错误");
delete progressDialog;
file.close();
MyMsgBox(QMessageBox::Warning,"警告","Dat文件不符合规范");
return;
}
int channels = 0;
QJsonObject jsonObject = document.object();
if(jsonObject.contains(QStringLiteral("ChannelSettings"))){
QJsonValue arrayValue = jsonObject.value(QStringLiteral("ChannelSettings"));
if(arrayValue.isArray()){
QJsonArray array = arrayValue.toArray();
theSize = array.size();
for(int i = 0; i<array.size();i++){
WAVE_INFO waveInfo;
channelEnabled[i] = array.at(i)["isEnable"].toInt();
channelwork[i] = array.at(i)["isWork"].toInt();
if(channelEnabled[i] && channelwork[i]){
waveInfo.channelId = array.at(i)["channelId"].toString();
waveInfo.channelType = array.at(i)["sensorType"].toString();
waveInfo.channelName = array.at(i)["channelName"].toString();
waveInfo.sensorType = array.at(i)["sensorType"].toString();
waveInfo.channelSamleRate = array.at(i)["samplingRate"].toInt();
waveInfo.pairChannelID = array.at(i)["pairChannelId"].toString();
waveInfo.equipmentName = array.at(i)["equipmentName"].toString();
waveInfo.sensorEngineeringUnit = array.at(i)["sensorEngineeringUnit"].toString();
waveInfo.speedRefChannelId = array.at(i)["speedRefChannelId"].toString();
waveInfo.tachAutoTach = array.at(i)["tachAutoTach"].toBool();
waveInfo.sensorGapVoltage = array.at(i)["sensorGapVoltage"].toDouble();
waveInfo.sensorSensitivity = array.at(i)["sensorSensitivity"].toDouble();
QString strtachTriggerEdge = array.at(i)["tachTriggerEdge"].toString();
if(strtachTriggerEdge == "rising"){
waveInfo.iTrigger = 0;
}else if(strtachTriggerEdge == "falling"){
waveInfo.iTrigger = 1;
}
waveInfo.iTrigger = 0;
waveInfo.iKeyCount = array.at(i)["tachTriggerPerRev"].toInt();
waveInfo.iTriggerValue = array.at(i)["tachTriggerVoltageLevel"].toDouble();
waveInfo.iHysteresis = array.at(i)["tachTriggerHysteresis"].toDouble();
m_vecWaveInfo.push_back(waveInfo);
channels ++ ;
qDebug() << waveInfo.sensorGapVoltage << waveInfo.sensorSensitivity << endl;
qDebug() << waveInfo.channelId << waveInfo.channelType <<waveInfo.channelName << waveInfo.pairChannelID << waveInfo.sensorEngineeringUnit << waveInfo.speedRefChannelId<<endl;
}
}
}
}if(jsonObject.contains(QStringLiteral("groups"))){
QJsonValue arrayValue = jsonObject.value(QStringLiteral("groups"));
if(arrayValue.isArray()){
QJsonArray array1 = arrayValue.toArray();
theSize = array1.size();
for(int i = 0; i<array1.size();i++){
QString strChannelType = array1.at(i)["ChannelType"].toString();
QString strChannelID = array1.at(i)["name"].toString();
//if(strChannelType == "TACHOMETER")
{
for(int ii = 0; ii < m_vecWaveInfo.size();ii++){
if(strChannelID == m_vecWaveInfo[ii].channelId){
QJsonValue arrayValue = array1.at(i)["channels"];
QJsonArray array2 = arrayValue.toArray();
for(int j = 0; j<array2.size();j++){
if("SpeedProfileSpeed" == array2.at(j)["name"].toString()){
QJsonArray arrayValue = array2.at(j)["data"].toArray();
for(int jj = 0; jj < arrayValue.size();jj++){
m_vecWaveInfo[ii].SpeedProfileSpeed.push_back(arrayValue[jj].toDouble());
}
}
if("RMSValues" == array2.at(j)["name"].toString()){
QJsonArray arrayValue = array2.at(j)["data"].toArray();
for(int jj = 0; jj < arrayValue.size();jj++){
m_vecWaveInfo[ii].RMSValue.push_back(arrayValue[jj].toDouble());
}
}
}
}
}
}
}
}
}
/*if(jsonObject.contains(QStringLiteral("triggerEvent"))){
QJsonValue arrayValue = jsonObject.value(QStringLiteral("triggerEvent"));
QString strDataWatchName = arrayValue["triggeredDataWatchName"].toString();
}*/
qDebug()<<"channels" <<channels<<endl;
//循环读出原始数据内容
WAVE_CHNDATA m_WaveChnData[2000];
int Count, waveSize;
char buf[15];
m_vecAllData.clear();
//QVector<WAVE_DATA> pData;
int j = 0;
int temCount = 0;
int flag = -1;
progressDialog->setRange(0, iCount * channels-1);
while (!file.atEnd()) {
file.read((char *)&Count, sizeof(Count));
//qDebug()<<"Count" << Count << "temCount" <<temCount<< endl;
if(Count > temCount && flag == 0)//过滤超出的秒数的数据
break;
if(Count == temCount && flag == 0)
flag = 1;
if(Count < temCount || flag == 1){//过滤原始数据中转速多余数据
file.read(buf, sizeof(buf));
file.read((char *)&waveSize, sizeof(waveSize));
float f = 0.0;
QVector<double> vecSpeed;
qDebug()<<"waveSize" <<waveSize<<endl;
for (int i = 0; i < waveSize; i++) {
file.read((char *)&f, sizeof(f));
vecSpeed.push_back(f);
}
for(int ii = 0; ii < 2000;ii++){
if(m_WaveChnData[ii].Second == Count){
m_WaveChnData[ii].TimeStamp = vecSpeed;
}
}
flag = 0;
qDebug()<<"::MainWidget::ReadDatData()11 wave.channelId" << buf <<" wave.count"<<Count<<" wave.wavedata"<<m_WaveChnData[j].waveData.size()<<"waveSize"<<waveSize << "j"<<j<<endl;;
}else {
file.read(buf, sizeof(buf));
file.read((char *)&waveSize, sizeof(waveSize));
float f = 0.0;
WAVE_ALLDATA waveAll;
if(waveSize < 0 || waveSize > 131072){
qDebug() << "waveSize" << endl;
delete progressDialog;
file.close();
MyMsgBox(QMessageBox::Warning,"警告","Dat文件不符合规范");
return;
}
for (int i = 0; i < waveSize; i++) {
file.read((char *)&f, sizeof(f));
m_WaveChnData[j].channelId = buf;
m_WaveChnData[j].waveData.push_back(f);
m_WaveChnData[j].Second = Count;
}
temCount = Count;
qDebug()<<"::MainWidget::ReadDatData() wave.channelId" << m_WaveChnData[j].channelId<<" wave.count"<<Count<<" wave.wavedata"<<m_WaveChnData[j].waveData.size()<<"waveSize"<<waveSize << "j"<<j<<endl;;
}
progressDialog->setValue(j);
if (progressDialog->wasCanceled())
{
delete progressDialog;
file.close();
return ;
}
j++;
}
/*if(temCount != iCount){
MyMsgBox(QMessageBox::Warning,"警告","Dat文件采集秒数与实际读取秒数不一致");
iCount = temCount;
}*/
qDebug()<<m_vecAllData.size()<<m_vecAllData.capacity() << "iCount" <<iCount<<endl;
QVector<WAVE_INFO>::iterator iter = m_vecWaveInfo.begin();
int linecolor = 0;
for (;iter != m_vecWaveInfo.end() ; iter++ ) {
QVector<WAVE_DATA> m_vecPushData1;
WAVE_DATA wave;
int ii = 0;
for(int i = 0; i < j; i++){
if(iter->channelId.left(15) == m_WaveChnData[i].channelId.left(15)){
wave.waveData = m_WaveChnData[i].waveData;
float sum = 0.0;
if(iter->sensorType == "ACCELEROMETER" || iter->sensorType == "MICROPHONE" ||
iter->sensorType == "PROXIMETER" || iter->sensorType == "VELOCITY" ||
iter->sensorType == "TACHOMETER" || iter->sensorType == "THRUST" ||
iter->sensorType == "FAST_VOLTAGE"){
sum = std::accumulate(std::begin(wave.waveData), std::end(wave.waveData), 0.0);
float size = m_WaveChnData[i].waveData.size();
wave.mean = sum/size;
}else{
sum = 0.0;
}
if(iter->sensorType == "TACHOMETER"){
wave.TimeStamp = m_WaveChnData[i].TimeStamp;
qDebug()<< "iCount" <<iCount<<endl;
ii ++;
}
wave.SpeedProfileSpeed = iter->SpeedProfileSpeed;
wave.wavesize = wave.waveData.size();
wave.SamleRate = iter->channelSamleRate;
wave.sensorType = iter->sensorType;
wave.channelId = iter->channelId;
wave.channelNo = theSize;
wave.Time = iCount;
wave.channelName = iter->channelName;
wave.pairChannelID = iter->pairChannelID;
wave.sensorEngineeringUnit = iter->sensorEngineeringUnit;
wave.speedRefChannelId = iter->speedRefChannelId;
wave.RMSValue = iter->RMSValue;
wave.iTrigger = iter->iTrigger;
wave.iKeyCount = iter->iKeyCount;
wave.iTriggerValue = iter->iTriggerValue;
wave.iHysteresis = iter->iHysteresis;
wave.tachAutoTach = iter->tachAutoTach;
wave.sensorGapVoltage = iter->sensorGapVoltage;
wave.sensorSensitivity = iter->sensorSensitivity;
switch(linecolor){
case 0:
wave.linColor = Qt::green ;
break;
case 1:
wave.linColor = QColor(30,144,255) ;
break;
case 2:
wave.linColor = QColor(255,182,193) ;
break;
case 3:
wave.linColor = Qt::cyan ;
break;
case 4:
wave.linColor = Qt::magenta ;
break;
case 5:
wave.linColor = Qt::yellow ;
break;
case 6:
wave.linColor = QColor(255,69,0) ;
break;
case 7:
wave.linColor = QColor(0, 255, 127) ;
break;
case 8:
wave.linColor = QColor(255,140,0) ;
break;
case 9:
wave.linColor = QColor(0, 191, 255) ;
break;
case 10:
wave.linColor = Qt::darkMagenta ;
break;
case 11:
wave.linColor = Qt::lightGray ;
break;
case 12:
wave.linColor = Qt::darkYellow ;
break;
case 13:
wave.linColor = Qt::gray ;
break;
case 14:
wave.linColor = QColor(255, 218, 185) ;
break;
case 15:
wave.linColor = QColor(255, 20, 147) ;
break;
default:
break;
}
m_vecPushData1.push_back(wave);
//qDebug()<<"m_vecPushData1"<<m_vecPushData1.size()<<endl;
}
}
linecolor++;
mapWaveData.insert(iter->channelId,m_vecPushData1);
m_iRealCount = m_vecPushData1.size();
//qDebug()<<"mapWaveData size"<<mapWaveData.size()<<endl;
}
file.close();
free(buf0);
//qDebug() << "=====waveSpeedData time=====" <<mapWaveData[strChannelID].at(0).Time <<mapWaveData[speedChannelID].at(0).Time << endl;
qDebug() << "m_iRealCount" << m_iRealCount << endl;
//设置播放进度条
m_iCount = 0;
m_iCount = m_iRealCount;
m_DeviceInfo.DeviceIP = strIP;
m_DeviceInfo.DeviceMac = m_sEquipNo;
ui->horizontalSlider->setRange(1, m_iCount);
QString strCount = QString("%1/%2").arg(m_iCurCount).arg(m_iCount);
ui->label_value->setText(strCount);
QTime stopTime = QTime::currentTime();
qDebug() << "Time: " << startTime.msecsTo(stopTime) << "ms" <<endl;
delete progressDialog;
QList<int> m_splitterLengths(ui->splitter->sizes());
m_HideDevList = true;
m_splitterLengths[0] = 0;
ui->splitter->setSizes(m_splitterLengths);
if(m_iRealCount < 1){
MyMsgBox(QMessageBox::Warning,"警告","未读取到数据!");
return;
}
TrendChartPlotSlot();
EnableGraph();
}
void MainWidget::OpenFileSlot()
{
//同时打开多个文件
QSettings settings;
QStringList files = settings.value("recentFileList").toStringList();//读取recentFileList的值
qDebug() << "file size" << files.size() << endl;
for(int i = 0; i < files.size();i++){
qDebug() << files[i] << endl;
}
QStringList pathList = QFileDialog::getOpenFileNames(this, tr("选择文件"), tr(""), tr("*.dat"));
foreach(QString strPath, pathList)
{
qDebug() << "::MainWidget::OpenFileSlot() path=" << strPath;
QFileInfo fileinfo;
fileinfo = QFileInfo(strPath);
QString file_suffix = fileinfo.suffix();
QString FileName = fileinfo.fileName();
if(file_suffix == "dat"){
ReadDatData(strPath,FileName);
}else if(file_suffix == "csv"){
ReadCsvData(strPath);
}
}
}
void MainWidget::RetSlot(QString strjson,QString strip)
{
QScriptEngine engine;
QScriptValue sc = engine.evaluate("value=" + strjson);
int cmdType = sc.property("cmd").toString().toInt();
switch (cmdType) {
case 4:{
QString equipNo = sc.property("equipmentNo").toString();
global::MacAddr_G = sc.property("dataWatchNo").toString();
global::IpAddr_G = sc.property("localServerIpAddress").toString();
qDebug() << "mac地址" << global::MacAddr_G;
QString show = "";
QString way = sc.property("way").toString();
if (way.compare("udp") == 0) {
show = "校验成功";
} else if (way.compare("mul") == 0) {
show = "MAC:" + global::MacAddr_G + "SERVERIP:" + global::IpAddr_G;
}
deviceInfo.DeviceMac = global::MacAddr_G;
deviceInfo.DeviceIP = strip;
int iRet = sql_db.OperateDeviceData(deviceInfo);
if(AddFlag){
pAddDevice->UpdateDeviceInfo();
if(iRet < 0){
MyMsgBox(QMessageBox::Question,"警告","设备已经存在,请勿重复添加!");
return ;
}
}
IpSlot(strip,global::MacAddr_G);
AddFlag = false;
//ui->plainTextEdit->appendPlainText(show);
}
break;
default:
break;
}
//ui->Mac_comboBox->addItem(global::MacAddr_G);
}
QStringList MainWidget::getFileListUnderDir(const QString &dirPath)
{
QStringList fileList;
QDir dir(dirPath);
QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot | QDir::Dirs);
foreach (auto fileInfo, fileInfoList) {
if(fileInfo.isDir())
{
getFileListUnderDir(fileInfo.absoluteFilePath());
}
if(fileInfo.isFile())
{
qDebug() << __FUNCTION__ << __LINE__ << " : " << fileInfo.absoluteFilePath();
fileList.append(fileInfo.fileName());
}
}
return fileList;
}
void MainWidget::IpSlot(QString strip,QString strMAC,QString strName)
{
QTreeWidgetItem *pItem = findNOItemByIP(strip);
if(pItem != NULL){
return ;
}
//第一层树
qDebug() << "strip:::::::" << strip;
/*QString strArg = "ping " + strip + " -n 1 -i 2";
int exitcode = QProcess::execute(strArg);
qDebug() << "strip:::::::" << strip << exitcode;*/
QTreeWidgetItem *pTopItem = new QTreeWidgetItem();
QIcon icon(":/images/images/imgTreeIcon/remove2.png");
pTopItem->setIcon(0, icon);
QString str1 = "";
if(strName == "")
str1 = "Data Watch (" + strip + ")";
else
str1 = strName + " (" + strip + ")";
pTopItem->setText(0, str1);
pTopItem->setData(0, IP_ROLE, strip);
pTopItem->setData(0, FLAG_ROLE, "Data Watch");
ui->treeWidget->addTopLevelItem(pTopItem);
//第二层树
QTreeWidgetItem *pConfigItem = new QTreeWidgetItem(pTopItem);
QIcon iconConfig(":/images/images/imgTreeIcon/config.png");
pConfigItem->setIcon(0, iconConfig);
pConfigItem->setText(0, QStringLiteral("设备配置"));
pConfigItem->setData(0, FLAG_ROLE, "config");
// QTreeWidgetItem *pNameItem = new QTreeWidgetItem(pTopItem);
// QIcon iconName(":/images/images/imgTreeIcon/data.png");
// pNameItem->setIcon(0, iconName);
// pNameItem->setText(0, QStringLiteral("设备名称"));
// pNameItem->setData(0, FLAG_ROLE, "name");
QTreeWidgetItem *pNOItem = new QTreeWidgetItem(pTopItem);
QIcon iconNO(":/images/images/imgTreeIcon/data.png");
pNOItem->setIcon(0, iconNO);
pNOItem->setText(0, QStringLiteral("设备号"));
pNOItem->setData(0, FLAG_ROLE, "NO");
pNOItem->setData(0, NO_ROLE, strMAC);
QString str = pNOItem->text(0) + ": " + strMAC;
pNOItem->setText(0, str);
QTreeWidgetItem *pDataItem = new QTreeWidgetItem(pTopItem);
QIcon iconData(":/images/images/imgTreeIcon/data.png");
pDataItem->setIcon(0, iconData);
pDataItem->setText(0, QStringLiteral("数据"));
pDataItem->setData(0, FLAG_ROLE, "data");
//第三层树
QTreeWidgetItem *pChangeItem = new QTreeWidgetItem(pDataItem);
QIcon iconChange(":/images/images/imgTreeIcon/artic66.png");
pChangeItem->setIcon(0, iconChange);
pChangeItem->setText(0, QStringLiteral("变化"));
pChangeItem->setData(0, FLAG_ROLE, "change");
QTreeWidgetItem *pSizeItem = new QTreeWidgetItem(pDataItem);
pSizeItem->setIcon(0, iconChange);
pSizeItem->setText(0, QStringLiteral("大小"));
pSizeItem->setData(0, FLAG_ROLE, "size");
QTreeWidgetItem *pTimeItem = new QTreeWidgetItem(pDataItem);
pTimeItem->setIcon(0, iconChange);
pTimeItem->setText(0, QStringLiteral("时间触发"));
pTimeItem->setData(0, FLAG_ROLE, "time");
QTreeWidgetItem *pManulItem = new QTreeWidgetItem(pDataItem);
pManulItem->setIcon(0, iconChange);
pManulItem->setText(0, QStringLiteral("手动触发"));
pManulItem->setData(0, FLAG_ROLE, "manu");
//扫描本地dat文件
QString strDatPath = QCoreApplication::applicationDirPath() + "\\dat\\" + strMAC;
qDebug() << __FUNCTION__ << __LINE__ << " : " << strDatPath;
QDir dir(strDatPath);
QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot | QDir::Dirs);
foreach (auto fileInfo, fileInfoList) {
if(fileInfo.isDir())
{
qDebug() << __FUNCTION__ << __LINE__ << " : " << fileInfo.absoluteFilePath();
//分类
if(fileInfo.absoluteFilePath().contains("manu"))
{
QStringList fileList = getFileListUnderDir(fileInfo.absoluteFilePath());
foreach (auto DatFileName, fileList)
{
qDebug() << __FUNCTION__ << __LINE__ << " : " << DatFileName;
QTreeWidgetItem *pNewItem = new QTreeWidgetItem();
pNewItem->setCheckState(0, Qt::Unchecked);
pNewItem->setText(0, DatFileName);
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,1);
pManulItem->addChild(pNewItem);
}
//
//datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNo + "\\" + "manu" + "\\";
}
else if (fileInfo.absoluteFilePath().contains("time"))
{
QStringList fileList = getFileListUnderDir(fileInfo.absoluteFilePath());
foreach (auto DatFileName, fileList)
{
qDebug() << __FUNCTION__ << __LINE__ << " : " << DatFileName;
QTreeWidgetItem *pNewItem = new QTreeWidgetItem();
pNewItem->setCheckState(0, Qt::Unchecked);
pNewItem->setText(0, DatFileName);
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,1);
pTimeItem->addChild(pNewItem);
}
}
else if (fileInfo.absoluteFilePath().contains("size"))
{
QStringList fileList = getFileListUnderDir(fileInfo.absoluteFilePath());
foreach (auto DatFileName, fileList)
{
qDebug() << __FUNCTION__ << __LINE__ << " : " << DatFileName;
QTreeWidgetItem *pNewItem = new QTreeWidgetItem();
pNewItem->setCheckState(0, Qt::Unchecked);
pNewItem->setText(0, DatFileName);
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,1);
pSizeItem->addChild(pNewItem);
}
}
else if (fileInfo.absoluteFilePath().contains("change"))
{
QStringList fileList = getFileListUnderDir(fileInfo.absoluteFilePath());
foreach (auto DatFileName, fileList)
{
qDebug() << __FUNCTION__ << __LINE__ << " : " << DatFileName;
QTreeWidgetItem *pNewItem = new QTreeWidgetItem();
pNewItem->setCheckState(0, Qt::Unchecked);
pNewItem->setText(0, DatFileName);
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
pNewItem->setIcon(0, icon);
pNewItem->setData(0,FILE_ROLE,1);
pChangeItem->addChild(pNewItem);
}
}
}
}
if(m_pNetMgr)
{
m_pNetMgr->RequestFileInfo(strip);
m_pNetMgr->RequestChannelInfo(strip);
}
}
void MainWidget::slotCustomContextMenuRequested(const QPoint &pos)
{
qDebug()<<"MainWidget::slotCustomContextMenuRequested"<<pos;
QTreeWidgetItem *pItem = ui->treeWidget->itemAt(pos);
qDebug()<<"slotCustomContextMenuRequested";
if(pItem == NULL)
return;
if(pItem && pItem->parent() &&(pItem->parent()->data(0, FLAG_ROLE).value<QString>().contains("change") ||
pItem->parent()->data(0, FLAG_ROLE).value<QString>().contains("size") ||
pItem->parent()->data(0, FLAG_ROLE).value<QString>().contains("time") ||
pItem->parent()->data(0, FLAG_ROLE).value<QString>().contains("manu"))
)
{
QString strIP = pItem->parent()->parent()->parent()->data(0, IP_ROLE).value<QString>();
QTreeWidgetItem *pItemNO = findNOItemByIP(strIP);
QString str = pItem->parent()->data(0, FLAG_ROLE).value<QString>();
QString strNO = pItemNO->data(0,NO_ROLE).value<QString>();
QString strData = pItem->parent()->data(0, FLAG_ROLE).value<QString>();
QString FileName = pItem->text(0);
qDebug()<<"MainWidget"<<str;
QMenu menu;
QAction *pAction = menu.addAction(QStringLiteral("下载"));
QAction *pActionOpen = menu.addAction(QStringLiteral("打开"));
QAction *pActionDel = menu.addAction(QStringLiteral("删除"));
if(pItem->data(0,FILE_ROLE).value<QString>() == "0"){//文件不在本地
pActionOpen->setEnabled(false);
pActionDel->setEnabled(false);
}
if(pAction == menu.exec(QCursor::pos()))
{
qDebug()<<"doDownLoad";
QString datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNO + "\\" + strData + "\\";
QFileInfo file(datpath + FileName);
if(file.exists())
{
MyMsgBox(QMessageBox::Information,"提示","文件已存在!");
return;
}
doDownLoad(pItem, datpath + FileName);
}
else if(pActionOpen == menu.exec(QCursor::pos()))
{
QString datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNO + "\\" + strData + "\\";
qDebug()<<"MainWidget"<<datpath;
QFileInfo file(datpath + FileName);
ReadDatData(datpath + FileName,FileName,strIP);
return;
}
else if(pActionDel == menu.exec(QCursor::pos())){
QString datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNO + "\\" + strData + "\\";
QFile::remove(datpath + FileName);
return;
}
}else if(pItem->data(0, FLAG_ROLE).value<QString>().contains("Data Watch")){
qDebug()<<"Data Watch";
QMenu menu;
QAction *pAction = menu.addAction(QStringLiteral("删除"));
if(pAction == menu.exec(QCursor::pos())){
QString sAddr = pItem->text(0);
int bpos = sAddr.indexOf("(");
sAddr = sAddr.right(sAddr.length()- bpos -1);
sAddr = sAddr.left(sAddr.length()-1);
QString tablename = "t_Device",col = "DeviceIP";
sql_db.DeleteData(tablename,col,sAddr);
ui->treeWidget->clear();
InitDevList();
}
}
}
void MainWidget::doDownLoad(QTreeWidgetItem *pItem, QString sPath)
{
qDebug()<<"[MainWidget::doDownLoad]";
//1、文件/2、“类型比如大小”/3、“数据”/4、“IP” 节点
QString str = pItem->parent()->data(0, FLAG_ROLE).value<QString>();
qDebug() << str << endl;
if(pItem && pItem->parent() && pItem->parent()->parent())
{
QTreeWidgetItem *pTopItem = pItem->parent()->parent();
int iCount = pItem->parent()->childCount();
for (int i = 0; i < iCount; ++i)
{
QTreeWidgetItem *pChildItem = pItem->parent()->child(i);
if(pChildItem->isSelected() && m_pNetMgr)
{
QString sAddr = pChildItem->text(0);
QString sIP = pTopItem->parent()->text(0);
int bpos = sIP.indexOf("(");
sIP = sIP.right(sIP.length()- bpos -1);
sIP = sIP.left(sIP.length()-1);
m_pNetMgr->RequestDownload(sIP, sAddr, sPath + "/" +sAddr);
qDebug()<<QString("[MainWidget::doDownLoad] download sIP = %1, sAddr = %2, path = %3.")
.arg(sIP).arg(sAddr).arg(sPath +"/"+ sAddr);
QFileInfo file(sPath + "/" + sAddr);
qDebug()<<file;
if(file.exists()){
MyMsgBox(QMessageBox::Information,"提示","下载成功!");
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
pItem->setData(0,FILE_ROLE,1);
pItem->setIcon(0, icon);
}
//m_pNetMgr->RequestFileList(sIP);
}
}
}
}
void MainWidget::EnableGraph(bool isOpen)
{
if(isOpen){
ui->modelBtn_TrendChart->setEnabled(false);
ui->modelBtn_TrendChart->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M1-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M1-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M1-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M1-p.png) 1; }");
ui->modelBtn_TimeDomain->setEnabled(false);
ui->modelBtn_TimeDomain->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M2-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M2-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M2-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M2-p.png) 1; }");
ui->modelBtn_spec->setEnabled(false);
ui->modelBtn_spec->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M9-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M9-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M9-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M9-p.png) 1; }");
ui->modelBtn_4->setEnabled(false);
ui->modelBtn_4->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M4-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M4-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M4-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M4-p.png) 1; }");
ui->modelBtn_5->setEnabled(false);
ui->modelBtn_5->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M5-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M5-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M5-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M5-p.png) 1; }");
ui->modelBtn_env->setEnabled(false);
ui->modelBtn_env->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M10-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M10-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M10-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M10-p.png) 1; }");
ui->modelBtn_6->setEnabled(false);
ui->modelBtn_6->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M6-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M6-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M6-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M6-p.png) 1; }");
ui->modelBtn_7->setEnabled(false);
ui->modelBtn_7->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M7-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M7-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M7-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M7-p.png) 1; }");
// ui->modelBtn_FrequencyDomain->setEnabled(true);
// ui->modelBtn_FrequencyDomain->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M3-p.png) 1; }\
// QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M3-h.png) 1; }\
// QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M3-p.png) 1; }\
// QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M3-p.png) 1; }");
ui->modelBtn_8->setEnabled(false);
ui->modelBtn_8->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M8-p.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M8-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M8-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M8-p.png) 1; }");
}else{
ui->modelBtn_TrendChart->setEnabled(true);
ui->modelBtn_TrendChart->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M1.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M1-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M1-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M1-p.png) 1; }");
ui->modelBtn_TimeDomain->setEnabled(true);
ui->modelBtn_TimeDomain->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M2.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M2-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M2-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M2-p.png) 1; }");
ui->modelBtn_spec->setEnabled(true);
ui->modelBtn_spec->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M9.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M9-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M9-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M9-p.png) 1; }");
ui->modelBtn_4->setEnabled(true);
ui->modelBtn_4->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M4.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M4-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M4-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M4-p.png) 1; }");
ui->modelBtn_5->setEnabled(true);
ui->modelBtn_5->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M5.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M5-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M5-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M5-p.png) 1; }");
ui->modelBtn_env->setEnabled(true);
ui->modelBtn_env->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M10.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M10-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M10-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M10-p.png) 1; }");
ui->modelBtn_6->setEnabled(true);
ui->modelBtn_6->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M6.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M6-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M6-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M6-p.png) 1; }");
ui->modelBtn_7->setEnabled(true);
ui->modelBtn_7->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M7.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M7-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M7-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M7-p.png) 1; }");
// ui->modelBtn_FrequencyDomain->setEnabled(true);
// ui->modelBtn_FrequencyDomain->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M3.png) 1; }\
// QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M3-h.png) 1; }\
// QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M3-p.png) 1; }\
// QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M3-p.png) 1; }");
ui->modelBtn_8->setEnabled(true);
ui->modelBtn_8->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M8.png) 1; }\
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M8-h.png) 1; }\
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M8-p.png) 1; }\
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M8-p.png) 1; }");
}
// ui->modelBtn_11->setEnabled(true);
// ui->modelBtn_11->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M11.png) 1; }\
// QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M11-h.png) 1; }\
// QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M11-p.png) 1; }\
// QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M11-p.png) 1; }");
// ui->modelBtn_12->setEnabled(true);
// ui->modelBtn_12->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/M12.png) 1; }\
// QPushButton:hover { border-image:url(:/images/images/imgDatamodel/M12-h.png) 1; }\
// QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/M12-p.png) 1; }\
// QPushButton:checked {border-image:url(:/images/images/imgDatamodel/M12-p.png) 1; }");
}