DataPlayer/ChaosDataPlayer/MainWidget.cpp
2022-07-30 11:50:01 +08:00

2904 lines
123 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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; }");
}