#include "mainwindow.h" #include "ui_mainwindow.h" #include "converttoseries.h" #include #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(voltage.id(), voltageChart)); chartMap.insert(std::pair(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); } }