#include "frmheatmap.h" #include "MEASURERESULT.h" #include "ui_frmHeatMap.h" #include "CPerfTimer.h" #include #include #include #include "quihelper.h" frmHeatMap::frmHeatMap(QString mapKey,QWidget *parent) : frmMapGps(mapKey,parent) ,mMeasureResult(new sMeasureResult()) ,pThreshold(nullptr) //,ui(new Ui::frmHeatMap) { ui = (Ui::frmHeatMap*)frmMapGps::ui; } frmHeatMap::~frmHeatMap() { //delete ui; delete mMeasureResult; } void frmHeatMap::OpenResult(QString FileName) { float t; CommonLib::ToolKit::CPerfTimer timer; std::string stdFileName = FileName.toStdString(); this->mMeasureResult->Read(stdFileName); timer.Start(); ShowValue(); //列表显示历史数据 //------------------------- t = timer.GetUs(); qDebug("ShowValue time = %f us\r\n",t); //在地图上显示热力图 ShowHeadPoints(); } void frmHeatMap::ShowValue(void) { //tableWidgetSource QTableWidget *ptr2 = ui->tableWidgetSource; for(long row = ptr2->rowCount()-1;row>=0;row--) { ptr2->removeRow(row); } long count1 = mMeasureResult->results.count(); if(count1==0)return; ui->tableWidgetSource->setRowCount(count1); for (long i = 0; i < count1; ++i) { QString strPos =mMeasureResult->results[i].toString(); //----------------------------- if(mMeasureResult->results[i].OilWeightPPM<0.1) { mMeasureResult->results[i].OilWeightPPM=0; } QString strppm = QString("%1").arg( QString::number(mMeasureResult->results[i].OilWeightPPM, 'f', 1)); addItem(ui->tableWidgetSource, i,strPos ,strppm); } //滚动条滚到最下面, //ui->tableWidgetSource->scrollToBottom(); } void frmHeatMap::initTable() { initTable(ui->tableWidgetSource); } //初始化表格控件 void frmHeatMap::initTable(QTableWidget *tableWidget) { ptr = tableWidget; QUIHelper::initTableView(tableWidget, AppData::RowHeight); tableWidget->setColumnCount(3); tableWidget->setHorizontalHeaderLabels(QStringList() << "序 号" << "采样经纬度"<<"含 量"); tableWidget->setColumnWidth(0, 80); tableWidget->setColumnWidth(1, 140); tableWidget->setColumnWidth(2, 60); //总宽度280,三个相加与总宽度相同 //tableWidget->setRowCount(1); } //显示热力点 void frmHeatMap::ShowHeadPoints(void) { float t; CommonLib::ToolKit::CPerfTimer timer; auto points = mMeasureResult->results; int Count = points.count(); if( Count > 0 ) { QString strPointHead = "var points =[\r\n"; QString strPointEnd = "];\r\n"; QString strFunc = QString("showHeatMap(points,%1);").arg(*this->pThreshold); auto combPoints = [&]( )->QString { //CommonLib::EnhanceStruct::StringBuilder sb; /* QString strPoints(""); foreach (oneResult OneResult, points) { QString Point = QString("{\"lng\":%1,\"lat\":%2,\"count\":%3},") .arg(OneResult.trueLongitude) .arg(OneResult.trueLatitude) .arg(OneResult.OilWeightPPM); strPoints+=Point; } int len = strPoints.length(); strPoints.replace(len-1,1," "); return strPoints; */ QStringList listPoints; foreach (oneResult OneResult, points) { QString Point = QString("{\"lng\":%1,\"lat\":%2,\"count\":%3}") .arg(OneResult.trueLongitude) .arg(OneResult.trueLatitude) .arg(OneResult.OilWeightPPM); listPoints.append(Point); } return listPoints.join(","); }; //----------------加载时间最长--------------------------- timer.Start(); QString strJSFunc =strPointHead+combPoints()+strPointEnd+strFunc; t = timer.GetUs(); qDebug("combine js string time = %f us\r\n",t); timer.Start(); runJs(strJSFunc); t = timer.GetUs(); qDebug("SendPoint time = %f us\r\n",t); //-------------------------------------------- //第一条为地图中心 //GPSPoint gpsPoint( points[0].trueLongitude,points[0].trueLatitude); //最后一条为地图中心 timer.Start(); GPSPoint gpsPoint( points[Count-1].trueLongitude,points[Count-1].trueLatitude); QString strJSFunc2 = QString("setCenter('%1')").arg(gpsPoint.toString()); runJs(strJSFunc2); t = timer.GetUs(); qDebug("setCenter time = %f us\r\n",t); /* auto *worker = new ThreadWork () ; // 调用 moveToThread 将该任务交给 workThread worker->moveToThread(&loadThread); // operate 信号发射后启动线程工作 connect(this, SIGNAL(operate(QString )), worker, SLOT(doWork(QString))); // 该线程结束时销毁 connect(&loadThread, &QThread::finished, worker, &QObject::deleteLater); // 线程结束后发送信号,对结果进行处理 connect(worker, SIGNAL(resultReady(float)), this, SLOT(handleResults(float))); // 启动线程 loadThread.start(); // 发射信号,开始执行 qDebug() << "emit the signal to execute!" ; qDebug() << "\tCurrent thread ID:" << QThread::currentThreadId() << '\n' ; emit operate(strJSFunc + strJSFunc2); */ } } //--------------------------------------------------------------------------------------- void frmHeatMap::tableSelectionChanged() { int index = ui->tableWidgetSource->currentRow(); if(index >=0) { QString point = mMeasureResult->results[index].toString(); QString js = QString("setCenter('%1')").arg(point); runJs(js); } } void frmHeatMap::on_tableWidgetSource_itemSelectionChanged() { tableSelectionChanged(); } void frmHeatMap::on_tableWidgetSource_cellDoubleClicked(int row, int column) { tableSelectionChanged(); } void frmHeatMap::handleResults(const float result) { }