dataservice/mainwindow.cpp

132 lines
4.4 KiB
C++

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "converttoseries.h"
#include <iostream>
#include "chart.h"
#include "chartview.h"
using namespace QtCharts;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
/*
dataService = new DataService();
dataService->moveToThread(&dataServiceThread);
connect(&dataServiceThread, &QThread::finished, dataService, &QObject::deleteLater);
connect(ui->goBtn, SIGNAL(clicked(bool)), dataService, SLOT(doWork()));
connect(dataService, SIGNAL(resultReady()), this, SLOT(handleResult()));
dataServiceThread.start();
*/
connect(&dataQueue, SIGNAL(resultReady(QString)), this, SLOT(dataReady(QString)));
//connect(&dataQueue, SIGNAL(finished()), &dataQueue, SLOT(deleteLater()));
DataLoader *loader = new DataLoader();
loader->moveToThread(&dataQueue);
dataQueue.start();
connect(ui->requestDataBtn, SIGNAL(clicked(bool)), this, SLOT(requestData()));
//file = nix::File::open("/home/grewe/zwischenlager/2017-08-17-af-invivo-1/2017-08-17-af-invivo-1.nix",
// nix::FileMode::ReadOnly);
file = nix::File::open("/Users/jan/zwischenlager/threading_test/dataservice/data/2017-08-17-af-invivo-1.nix",
nix::FileMode::ReadOnly);
nix::Block b = file.getBlock(0);
this->voltage = b.getDataArray("V-1");
this->eod = b.getDataArray("EOD");
voltageChart = new Chart();
voltageChart->legend()->hide();
voltageChart->createDefaultAxes();
eodChart = new Chart();
eodChart->legend()->hide();
eodChart->createDefaultAxes();
chartMap.insert(std::pair<std::string, Chart*>(voltage.id(), voltageChart));
chartMap.insert(std::pair<std::string, Chart*>(eod.id(), eodChart));
voltageChart->setTitle(QString::fromStdString(this->voltage.name()));
eodChart->setTitle(QString::fromStdString(this->eod.name()));
QMargins margins = voltageChart->margins();
int marg1 = margins.left();
margins.setLeft(marg1 * 4);
eodChart->setMargins(margins);
voltageView = new ChartView(voltageChart);
//voltageView->setRubberBand(QChartView::HorizontalRubberBand);
voltageView->setLineWidth(1);
eodView = new ChartView(eodChart);
//eodView->setRubberBand(QChartView::HorizontalRubberBand);
eodView->setLineWidth(1);
voltageView->setRenderHint(QPainter::Antialiasing);
eodView->setRenderHint(QPainter::Antialiasing);
ui->vbox->addWidget(voltageView);
ui->vbox->addWidget(eodView);
}
MainWindow::~MainWindow() {
if (file) {
file.close();
}
//dataServiceThread.quit();
//dataServiceThread.wait();
dataQueue.stop();
dataQueue.quit();
dataQueue.wait();
delete ui;
}
void MainWindow::dataReady(QString requestId) {
DataResult1D data = dataQueue.getData(requestId);
if (data.id.empty()) {
return;
}
ConvertToSeries *task = new ConvertToSeries();
QLineSeries *series = new QLineSeries();
task->setData(series, data);
connect(task, SIGNAL(dataConverted(QLineSeries*,QString, double, double)), this, SLOT(dataConverted(QLineSeries*,QString, double, double)));
QThreadPool::globalInstance()->start(task);
}
void MainWindow::dataConverted(QLineSeries *series, QString entityId, double ymin, double ymax) {
Chart *chart = chartMap[entityId.toStdString()];
series->setUseOpenGL(true);
chart->addSeries(series);
QValueAxis *axisY = new QValueAxis;
double range = ymax - ymin;
axisY->setRange(ymin - 0.2 * range, ymax + 0.2 * range);
axisY->setTickCount(10);
axisY->applyNiceNumbers();
axisY->setTitleText("Test");
chart->setAxisY(axisY, series);
QValueAxis *axisX = new QValueAxis;
axisX->setRange(series->at(0).x(), series->at(series->count()-1).x());
axisX->setTickCount(10);
axisX->setLabelFormat("%.4f");
axisX->applyNiceNumbers();
chart->setAxisX(axisX, series);
connect(axisX, SIGNAL(rangeChanged(qreal,qreal)), chart, SLOT(XRangeChanged(qreal,qreal)));
QPen pen = series->pen();
pen.setWidth(1);
series->setPen(pen);
}
void MainWindow::requestData() {
if (voltage && eod) {
nix::NDSize count(1, 100000);
nix::NDSize start(1, 0);
std::string vId, eodId;
dataQueue.requestData(voltage, count, start, vId);
dataQueue.requestData(eod, count, start, eodId);
}
}