diff --git a/mainwindow.cpp b/mainwindow.cpp --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -32,6 +32,9 @@ MainWindow::MainWindow(QWidget *parent) QObject::connect(&(this->serialPort), &QSerialPort::readyRead, this, &MainWindow::onDataReady); + QObject::connect(ui->spNumOfSamples, SELECT::OVERLOAD_OF(&QSpinBox::valueChanged), + this, &MainWindow::onNumOfSamplesChanged); + // init port signals QObject::connect(&(this->serialPort), SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onPortError(QSerialPort::SerialPortError))); @@ -41,7 +44,7 @@ MainWindow::MainWindow(QWidget *parent) ui->cbBaudRate->setCurrentIndex(ui->cbBaudRate->findText("9600")); // init plot - numOfSamples = 100; + numOfSamples = ui->spNumOfSamples->value(); dataArray.resize(numOfSamples); dataX.resize(numOfSamples); for (int i = 0; i < dataX.size(); i++) @@ -200,3 +203,25 @@ void MainWindow::addData(double data) curve.setSamples(dataX, dataArray); ui->plot->replot(); } + +void MainWindow::onNumOfSamplesChanged(int value) +{ + int oldNum = this->numOfSamples; + numOfSamples = value; + + // resize data arrays + if (numOfSamples < oldNum) + { + dataX.resize(numOfSamples); + dataArray.remove(0, oldNum - numOfSamples); + } + else if(numOfSamples > oldNum) + { + dataX.resize(numOfSamples); + for (int i = oldNum; i < numOfSamples; i++) + { + dataX[i] = i; + dataArray.prepend(0); + } + } +} diff --git a/mainwindow.h b/mainwindow.h --- a/mainwindow.h +++ b/mainwindow.h @@ -40,6 +40,8 @@ private slots: void onDataReady(); void onPortError(QSerialPort::SerialPortError error); + void onNumOfSamplesChanged(int value); + signals: void portToggled(bool open); }; diff --git a/mainwindow.ui b/mainwindow.ui --- a/mainwindow.ui +++ b/mainwindow.ui @@ -6,7 +6,7 @@ 0 0 - 652 + 653 534 @@ -326,10 +326,73 @@ - + - Tab 2 + Plot + + + + + Qt::Horizontal + + + + 370 + 20 + + + + + + + + Qt::Vertical + + + + + + + + + + + Number Of Samples: + + + + + + + 2 + + + 10000 + + + 1000 + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + @@ -340,8 +403,8 @@ 0 0 - 652 - 20 + 653 + 23