#include "mainwindow.h" #include "ui_mainwindow.h" #include "converttoseries.h" #include 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/event_queue/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 QChart(); voltageChart->legend()->hide(); //voltageChart->createDefaultAxes(); eodChart = new QChart(); 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 QtCharts::QChartView(voltageChart); eodView = new QtCharts::QChartView(eodChart); 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)), this, SLOT(dataConverted(QLineSeries*,QString))); QThreadPool::globalInstance()->start(task); } void MainWindow::dataConverted(QLineSeries *series, QString entityId) { QPen pen = series->pen(); pen.setWidth(1); series->setPen(pen); chartMap[entityId.toStdString()]->addSeries(series); } void MainWindow::requestData() { if (voltage && eod) { nix::NDSize count(1, 10000); nix::NDSize start(1, 0); std::string vId, eodId; dataQueue.requestData(voltage, count, start, vId); dataQueue.requestData(eod, count, start, eodId); } }