2022-07-30 11:50:01 +08:00
|
|
|
|
#include "MainWidget.h"
|
|
|
|
|
|
#include "ui_MainWidget.h"
|
|
|
|
|
|
#include <QFileDialog>
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
#include <QtGlobal>
|
|
|
|
|
|
#include <QThread>
|
|
|
|
|
|
#include <QUdpSocket>
|
|
|
|
|
|
#include <QDateTime>
|
|
|
|
|
|
#include <QMenu>
|
|
|
|
|
|
#include <QAction>
|
|
|
|
|
|
#include <QFileDialog>
|
|
|
|
|
|
#include <QDesktopServices>
|
|
|
|
|
|
#include <QElapsedTimer>
|
|
|
|
|
|
#include "ChildForm.h"
|
|
|
|
|
|
#include "Child3dFrom.h"
|
|
|
|
|
|
#include "cidwudp.h"
|
|
|
|
|
|
#include "NetMgr.h"
|
|
|
|
|
|
#include "msgbox.h"
|
|
|
|
|
|
#include <exception>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DEVICE_INFO deviceInfo;
|
|
|
|
|
|
|
|
|
|
|
|
#define FLAG_ROLE (Qt::UserRole + 2)
|
|
|
|
|
|
#define NO_ROLE (Qt::UserRole + 3) //存储设备号
|
|
|
|
|
|
#define IP_ROLE (Qt::UserRole + 4) //存储ip
|
|
|
|
|
|
#define FILE_ROLE (Qt::UserRole + 5) //本地Dat
|
|
|
|
|
|
|
|
|
|
|
|
int channelwork[32];
|
|
|
|
|
|
int channelEnabled[32];
|
|
|
|
|
|
bool AddFlag = false;
|
|
|
|
|
|
MainWidget::MainWidget(QWidget *parent)
|
|
|
|
|
|
: BaseWgt(parent)
|
|
|
|
|
|
, ui(new Ui::MainWidget)
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
ui->setupUi(m_pMainWgt);
|
|
|
|
|
|
resize(m_pMainWgt->size());
|
|
|
|
|
|
setWindowTitle("Chaos Data Player");
|
|
|
|
|
|
|
|
|
|
|
|
m_iCurCount = 1;
|
|
|
|
|
|
m_backPlay = false;
|
|
|
|
|
|
Init();
|
|
|
|
|
|
InitSignalandSlot();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
MainWidget::~MainWidget()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_pTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pTimer->deleteLater();
|
|
|
|
|
|
}
|
|
|
|
|
|
delete ui;
|
|
|
|
|
|
}
|
|
|
|
|
|
void MainWidget::Init()
|
|
|
|
|
|
{
|
|
|
|
|
|
ui->treeWidget->expandAll();
|
|
|
|
|
|
ui->treeWidget->setColumnCount(3);
|
|
|
|
|
|
ui->treeWidget->setColumnWidth(0, 700);
|
|
|
|
|
|
ui->treeWidget->setColumnWidth(1, 150);
|
|
|
|
|
|
ui->treeWidget->setColumnWidth(2, 160);
|
|
|
|
|
|
ui->tabWidget->setIconSize(QSize(30, 30));
|
|
|
|
|
|
ui->tabWidget->setTabsClosable(false);
|
|
|
|
|
|
ui->splitter->setHandleWidth(1);
|
|
|
|
|
|
QList<int> m_splitterLengths(ui->splitter->sizes());
|
|
|
|
|
|
m_splitterLengths[0] = 200;
|
|
|
|
|
|
m_splitterLengths[1] = 500;
|
|
|
|
|
|
ui->splitter->setSizes(m_splitterLengths);
|
|
|
|
|
|
m_HideDevList = false;
|
|
|
|
|
|
|
|
|
|
|
|
QString strCount = QString("%1/%2").arg(0).arg(0);
|
|
|
|
|
|
ui->label_value->setText(strCount);
|
|
|
|
|
|
ui->horizontalSlider->setRange(0,0);
|
|
|
|
|
|
|
|
|
|
|
|
m_pTimer = new QTimer(this);
|
|
|
|
|
|
connect(m_pTimer, SIGNAL(timeout()), this, SLOT(TimerSlot()));
|
|
|
|
|
|
|
|
|
|
|
|
m_pCIDWUdp = new CIDWUdp();
|
|
|
|
|
|
m_pThread = new QThread;
|
|
|
|
|
|
//移动到另一线程
|
|
|
|
|
|
m_pCIDWUdp->moveToThread(m_pThread);
|
|
|
|
|
|
connect(m_pCIDWUdp, SIGNAL(RetSignal(QString,QString)), this, SLOT(RetSlot(QString,QString)));
|
|
|
|
|
|
//connect(m_pCIDWUdp, SIGNAL(IpSignal(QString)), this, SLOT(IpSlot(QString)));
|
|
|
|
|
|
connect(m_pThread, SIGNAL(finished()), m_pCIDWUdp, SLOT(deleteLater()));
|
|
|
|
|
|
m_pThread->start();
|
|
|
|
|
|
|
|
|
|
|
|
m_pNetMgr = new NetMgr(this);
|
|
|
|
|
|
|
|
|
|
|
|
//设置拖动布局的初始比例
|
|
|
|
|
|
|
|
|
|
|
|
ui->splitter->setStretchFactor(0, 1); // widget gets 3 out of 4 width/height units
|
|
|
|
|
|
ui->splitter->setStretchFactor(1, 5);
|
|
|
|
|
|
|
|
|
|
|
|
ui->tabWidget->setStyleSheet("QTabWidget#tabWidget{background-color:rgb(255,0,0);}\
|
|
|
|
|
|
QTabBar::tab{background-color:rgb(58,63,72);color:rgb(170,195,207);font:12pt '新宋体'}\
|
|
|
|
|
|
QTabBar::tab::selected{background-color:rgb(28,28,36);color:rgb(170,195,207);font:12pt '新宋体'}");
|
|
|
|
|
|
|
|
|
|
|
|
ui->Btn_Setting->setVisible(false);
|
|
|
|
|
|
InitDevList();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
void MainWidget::InitDevList()
|
|
|
|
|
|
{
|
|
|
|
|
|
int iRet = sql_db.OpenDataBase();
|
|
|
|
|
|
qDebug() <<"iRet" <<iRet << endl;
|
|
|
|
|
|
iRet = sql_db.CreateDataBase();
|
|
|
|
|
|
sql_db.InitDevice();
|
|
|
|
|
|
QString tablename = "t_Device";
|
|
|
|
|
|
QString Col = "DeviceIP";
|
|
|
|
|
|
array_t DevList = sql_db.GetDataMultiLine(tablename,Col,"");
|
|
|
|
|
|
for(int i = 0; i < DevList.size();i++){
|
|
|
|
|
|
qDebug()<<"InitDevList"<<DevList[i][2];
|
|
|
|
|
|
IpSlot(DevList[i][0],DevList[i][1],DevList[i][2]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
void MainWidget::InitSignalandSlot()
|
|
|
|
|
|
{
|
|
|
|
|
|
connect(ui->fileBtn, SIGNAL(clicked()), this, SLOT(OpenFileSlot())); //打开文件
|
|
|
|
|
|
connect(ui->modelBtn_TrendChart, SIGNAL(clicked()), this, SLOT(TrendChartPlotSlot())); //趋势图
|
|
|
|
|
|
connect(ui->modelBtn_TimeDomain, SIGNAL(clicked()), this, SLOT(TimeDomainPlotSlot())); //时域图
|
|
|
|
|
|
connect(ui->modelBtn_spec, SIGNAL(clicked()), this, SLOT(FrequencyDomainPlotSlot())); //频域图
|
|
|
|
|
|
connect(ui->modelBtn_env, SIGNAL(clicked()), this, SLOT(EnvelopeAnalysisPlotSlot())); //包络图
|
|
|
|
|
|
connect(ui->modelBtn_4, SIGNAL(clicked()), this, SLOT(WaterFallPlotSlot())); //瀑布图
|
|
|
|
|
|
connect(ui->modelBtn_7, SIGNAL(clicked()), this, SLOT(OrbitPlotSlot())); //轴心轨迹图图
|
|
|
|
|
|
connect(ui->modelBtn_8, SIGNAL(clicked()), this, SLOT(PolarplotSlot())); //极坐标
|
|
|
|
|
|
connect(ui->modelBtn_5, SIGNAL(clicked()), this, SLOT(BodePlotSlot()));
|
|
|
|
|
|
connect(ui->modelBtn_6, SIGNAL(clicked()), this, SLOT(ShaftCenterlinePlotSlot()));
|
|
|
|
|
|
connect(ui->modelBtn_12, SIGNAL(clicked()), this, SLOT(View3D()));
|
2022-11-07 14:02:09 +08:00
|
|
|
|
connect(ui->modelBtn_TimeWave, SIGNAL(clicked()), this, SLOT(TimeWave()));
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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()
|
|
|
|
|
|
{
|
2022-11-07 14:02:09 +08:00
|
|
|
|
|
|
|
|
|
|
ui->refreshBtn->setEnabled(false);
|
|
|
|
|
|
QTimer::singleShot(1000, this, [=]() {
|
|
|
|
|
|
ui->refreshBtn->setEnabled(true);
|
|
|
|
|
|
});
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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()){
|
2022-08-05 19:46:35 +08:00
|
|
|
|
qDebug() << datpath << endl;
|
|
|
|
|
|
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
|
|
|
|
|
|
pNewItem->setIcon(0, icon);
|
|
|
|
|
|
pNewItem->setData(0,FILE_ROLE,0);
|
2022-11-07 14:02:09 +08:00
|
|
|
|
pTimeItem->addChild(pNewItem);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
}else{
|
|
|
|
|
|
QIcon icon(":/images/images/imgTreeIcon/remove2.png");
|
|
|
|
|
|
pNewItem->setIcon(0, icon);
|
|
|
|
|
|
pNewItem->setData(0,FILE_ROLE,0);
|
|
|
|
|
|
pTimeItem->addChild(pNewItem);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
else if (sfileName.contains("DELTA_EU") || sfileName.contains("DELTA_SPEED"))
|
2022-07-30 11:50:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
datpath = QCoreApplication::applicationDirPath() + "\\Dat\\" + strNo + "\\" + "change" + "\\";
|
|
|
|
|
|
filename = datpath + sfileName;
|
|
|
|
|
|
QFileInfo file(filename);
|
2022-11-07 14:02:09 +08:00
|
|
|
|
qDebug() << filename << endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
if(file.exists()){
|
2022-08-05 19:46:35 +08:00
|
|
|
|
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
|
|
|
|
|
|
pNewItem->setIcon(0, icon);
|
|
|
|
|
|
pNewItem->setData(0,FILE_ROLE,0);
|
2022-11-07 14:02:09 +08:00
|
|
|
|
pChangeItem->addChild(pNewItem);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
}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()){
|
2022-08-05 19:46:35 +08:00
|
|
|
|
QIcon icon(":/images/images/imgTreeIcon/remove6.png");
|
|
|
|
|
|
pNewItem->setIcon(0, icon);
|
|
|
|
|
|
pNewItem->setData(0,FILE_ROLE,0);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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));
|
2022-11-07 14:02:09 +08:00
|
|
|
|
pPdfPainter->drawText(iLeft+290 + i * 610,iTop+600,"频域图");
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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
|
2022-11-07 14:02:09 +08:00
|
|
|
|
|| pChild->GetFormType() == TrendChartPlot || pChild->GetFormType() == WaterFallPlot
|
|
|
|
|
|
|| pChild->GetFormType() == TimeWavePlot)
|
2022-07-30 11:50:01 +08:00
|
|
|
|
{//频域图,时域图,包络图,频谱图
|
|
|
|
|
|
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;
|
|
|
|
|
|
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)){
|
2022-11-07 14:02:09 +08:00
|
|
|
|
qDebug() << strChannelID << endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
pChild->mapBodeData.insert(strID,iter.value());
|
2022-11-07 14:02:09 +08:00
|
|
|
|
qDebug() << pChild->mapBodeData.size() << endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
if(pChild->mapBodeData.size() < 2){
|
|
|
|
|
|
QString ChannelID = iter.value().at(0).speedRefChannelId;
|
2022-11-07 14:02:09 +08:00
|
|
|
|
qDebug() << "speedRefChannelId" <<ChannelID << endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
if(ChannelID == "NONE" || ChannelID == ""){
|
2022-11-07 14:02:09 +08:00
|
|
|
|
//MyMsgBox(QMessageBox::Warning,"警告","当前文件中没有绑定转速通道,请手动选择另一个通道");
|
|
|
|
|
|
return;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
}else{
|
|
|
|
|
|
pChild->mapBodeData.insert(strID,mapWaveData[ChannelID]);
|
|
|
|
|
|
pChild->AddBodeSeries(strChannelID, iter.value(),mapWaveData[ChannelID]);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
2022-11-07 14:02:09 +08:00
|
|
|
|
qDebug() << 2 << strChannelID << endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
QVector<WAVE_DATA> waveSpeedData; //转速
|
|
|
|
|
|
QVector<WAVE_DATA> waveVibrateData; //加速度
|
|
|
|
|
|
QMap<QString,QVector<WAVE_DATA>>::Iterator iter = pChild->mapBodeData.begin();
|
|
|
|
|
|
for (;iter != pChild->mapBodeData.end() ; iter++) {
|
2022-11-07 14:02:09 +08:00
|
|
|
|
qDebug() << iter.value()[0].sensorType << endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
2022-08-05 19:46:35 +08:00
|
|
|
|
if((ChannelType != "PROXIMETER") /*&& (ChannelID == "NONE" || ChannelID == "")*/){
|
2022-11-07 14:02:09 +08:00
|
|
|
|
//MyMsgBox(QMessageBox::Warning,"警告","请选择径向位移通道");
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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 == ""){
|
2022-11-07 14:02:09 +08:00
|
|
|
|
//MyMsgBox(QMessageBox::Warning,"警告","当前文件中没有转速通道数据");
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::TrendChartPlot,tr("趋势图"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::TimeDomainPlot,tr("时域图"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::FrequencyDomainPlot,tr("频域图"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::EnvChartPlot,tr("包络图"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::WaterFallPlot,tr("瀑布图"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::BodePlot,tr("伯德图"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::OrbitPlot,tr("轴心轨迹图"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::ShaftCenterline,tr("轴心位置图"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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()
|
|
|
|
|
|
{
|
2022-11-07 14:02:09 +08:00
|
|
|
|
if(mapWaveData.size() < 1){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::PolarPlot,tr("极坐标"),&m_DeviceInfo,m_iCurCount-1,this);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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);
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
void MainWidget::TimeWave()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(mapWaveData.size() < 1){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if( ui->tabWidget->count() == 10){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","最大支持打开10张图谱");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
ChildForm *pChild = new ChildForm(FormType::TimeWavePlot,tr("时域长波形"),&m_DeviceInfo,m_iCurCount-1,this);
|
|
|
|
|
|
pChild->setCloseBtnVisible(true);
|
|
|
|
|
|
pChild->hideTopWgt();
|
|
|
|
|
|
pChild->SetName(tr("时域长波形"));
|
|
|
|
|
|
pChild->SetFormType(FormType::TimeWavePlot);
|
|
|
|
|
|
|
|
|
|
|
|
QIcon icon(":/images/images/imgDatamodel/wave.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);
|
|
|
|
|
|
}
|
2022-07-30 11:50:01 +08:00
|
|
|
|
void MainWidget::View3D()
|
|
|
|
|
|
{
|
|
|
|
|
|
/* Child3DFrom *pChild = new Child3DFrom(this);
|
|
|
|
|
|
|
|
|
|
|
|
QIcon icon(":/images/images/imgDatamodel/M7.png");
|
|
|
|
|
|
ui->tabWidget->addTab(pChild, icon, "");*/
|
|
|
|
|
|
}
|
|
|
|
|
|
void MainWidget::Dat2Csv()
|
|
|
|
|
|
{
|
2022-08-05 19:46:35 +08:00
|
|
|
|
if(mapWaveData.size() < 1){
|
|
|
|
|
|
MyMsgBox(QMessageBox::Warning,"警告","请先打开数据文件!");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2022-11-07 14:02:09 +08:00
|
|
|
|
QString dirpath = QFileDialog::getExistingDirectory(this, QStringLiteral("请选择保存CSV文件路径"), "./", QFileDialog::ShowDirsOnly);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
|
|
|
|
|
|
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");
|
2022-11-07 14:02:09 +08:00
|
|
|
|
QString filename = QString(dirName + "%1-%2-%3-%4.csv").arg(iter.key()).arg(iter.value().at(0).sensorType)\
|
|
|
|
|
|
.arg(iter.value().at(0).SamleRate).arg(DevicemCollectTime);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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();
|
2022-11-07 14:02:09 +08:00
|
|
|
|
//qDebug() << channelEnabled[i] << channelwork[i] << array.at(i)["channelId"].toString() << endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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();
|
2022-11-07 14:02:09 +08:00
|
|
|
|
qDebug() <<waveInfo.channelId<< "iKeyCount" << waveInfo.iKeyCount << "iTriggerValue" << waveInfo.iTriggerValue << "iHysteresis" << waveInfo.iHysteresis << endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
m_vecWaveInfo.push_back(waveInfo);
|
|
|
|
|
|
channels ++ ;
|
|
|
|
|
|
qDebug() << waveInfo.sensorGapVoltage << waveInfo.sensorSensitivity << endl;
|
2022-11-07 14:02:09 +08:00
|
|
|
|
qDebug() << waveInfo.channelId << waveInfo.channelType <<waveInfo.channelName << waveInfo.pairChannelID << waveInfo.sensorEngineeringUnit << waveInfo.speedRefChannelId << waveInfo.iTriggerValue<<endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}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;
|
2022-08-05 19:46:35 +08:00
|
|
|
|
m_WaveChnData[j].waveData.push_back((double)f);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
|
2022-08-05 19:46:35 +08:00
|
|
|
|
double sum = 0.0;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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);
|
2022-08-05 19:46:35 +08:00
|
|
|
|
double size = m_WaveChnData[i].waveData.size();
|
2022-07-30 11:50:01 +08:00
|
|
|
|
wave.mean = sum/size;
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
sum = 0.0;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(iter->sensorType == "TACHOMETER"){
|
|
|
|
|
|
wave.TimeStamp = m_WaveChnData[i].TimeStamp;
|
2022-11-07 14:02:09 +08:00
|
|
|
|
//qDebug()<< "iCount" <<iCount<<endl;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
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:
|
2022-11-07 14:02:09 +08:00
|
|
|
|
wave.linColor = QColor(153, 51, 250);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
break;
|
|
|
|
|
|
case 14:
|
|
|
|
|
|
wave.linColor = QColor(255, 218, 185) ;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 15:
|
2022-11-07 14:02:09 +08:00
|
|
|
|
wave.linColor = QColor(0,199,140) ;
|
2022-07-30 11:50:01 +08:00
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_vecPushData1.push_back(wave);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
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; }");
|
2022-11-07 14:02:09 +08:00
|
|
|
|
|
|
|
|
|
|
ui->modelBtn_TimeWave->setEnabled(false);
|
|
|
|
|
|
ui->modelBtn_TimeWave->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/wave-p.png) 1; }\
|
|
|
|
|
|
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/wave-h.png) 1; }\
|
|
|
|
|
|
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/wave-p.png) 1; }\
|
|
|
|
|
|
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/wave-p.png) 1; }");
|
2022-07-30 11:50:01 +08:00
|
|
|
|
}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; }");
|
2022-11-07 14:02:09 +08:00
|
|
|
|
|
|
|
|
|
|
ui->modelBtn_TimeWave->setEnabled(true);
|
|
|
|
|
|
ui->modelBtn_TimeWave->setStyleSheet(" QPushButton { border-image:url(:/images/images/imgDatamodel/wave.png) 1; }\
|
|
|
|
|
|
QPushButton:hover { border-image:url(:/images/images/imgDatamodel/wave-h.png) 1; }\
|
|
|
|
|
|
QPushButton:pressed {border-image:url(:/images/images/imgDatamodel/wave-p.png) 1; }\
|
|
|
|
|
|
QPushButton:checked {border-image:url(:/images/images/imgDatamodel/wave-p.png) 1; }");
|
2022-07-30 11:50:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 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; }");
|
|
|
|
|
|
}
|