Witam! Piszę aplikację rysującą wykres (biblioteka qcustomplot) na podstawie pobranych danych z portu szeregowego. Problem zaczyna się gdy do bufora załaduje się więcej niż jeden znak (wartość do 255 wyświetlana na wykresie). Program pomija resztę znaków. Pierwszym pomysłem jest zrobienie pętli która przesunie do tablicy "y" tyle znaków ile jest w buforze, jednak zastanawiam się, czy nie lepiej zrobić to w drugim wątku. Jak uzyskać dostęp do widgetu "wykres" w klasie dziedziczącej po QThread? Dobrze kombinuję, czy są lepsze sposoby na rozwiązanie tego problemu? Dodam jeszcze, że w przyszłości program będzie robił na podstawie zebranych danych obliczenia i przedstawiał je na drugim wykresie, co może zająć trochę czasu. Dane wejściowe na porcie to ok.2000 B/s czyli 2000 punktów na wykresie.
private:
Ui::MainWindow *ui;
void searchDevices();
void readData();
QVector<double> x;
int x_limit;
QVector<double> y;
int y_limit;
int y_counter;
QBuffer buffer;
QByteArray r_data;
unsigned char ch;
bool ok;
connect(port,&QSerialPort::readyRead,this,&MainWindow::readData);
void MainWindow::readData()
{
r_data = port->readAll();
qDebug() << "r_data: " << r_data;
ch = r_data.data()[0];
qDebug() << "ch: " << ch;
int wartosc = static_cast<int>(ch);
qDebug() << "wartosc: " << wartosc;
ui->textBrowser->setPlainText(ui->textBrowser->toPlainText() + ch);
//test
if(y_counter == (y_limit-1)){
for(int i=0;y_counter>i;i++){
y[i] = y[i+1];
}
y[y_counter] = wartosc;
}
else{
y[y_counter] = wartosc;
y_counter++;
}
ui->wykres->graph(0)->setData(x,y);
ui->wykres->replot();
}