Ich habe drei Echtzeitsignale auf dem gleichen Graphen, aber manchmal überlappen sie und ich brauche einen Schieberegler, um sie auf der Y-Achse nach oben und unten zu bewegen sie besser. Wie kann ich die Folie mit der Grafik verbinden? Wenn sich der Wert der Folie ändert, werden die Daten des Signals im Diagramm mit read_y_values + slide_value hinzugefügt. Dies ist mainwindow.cpp:Fügen Sie einen Schieberegler in Qt hinzu, der ein Signal auf der Y-Achse nach oben und unten bewegt
MainWindow::MainWindow(QSerialPort* s,QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
reader(s)
{
ui->setupUi(this);
connect(ui->verticalSlider,SIGNAL(valueChanged(int)),ui->customPlot,SLOT(deplasare()));
setGeometry(400, 250, 542, 390);
grafic(ui->customPlot);
setWindowTitle("Real Time Data Graph for EDA ");
statusBar()->clearMessage();
ui->customPlot->replot();
}
void MainWindow::grafic(QCustomPlot *customPlot)
{
Graph_Name = "Real Time Data Graph for EDA";
customPlot->addGraph(); // blue line
customPlot->graph(0)->setPen(QPen(Qt::blue));
customPlot->addGraph();
customPlot->graph(1)->setPen(QPen(Qt::blue));
customPlot->addGraph(); // red line
customPlot->graph(2)->setPen(QPen(Qt::red));
customPlot->addGraph();
customPlot->graph(3)->setPen(QPen(Qt::red));
customPlot->addGraph(); // green line
customPlot->graph(4)->setPen(QPen(Qt::green));
customPlot->axisRect()->setupFullAxesBox();
connect(&dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot()));
dataTimer.start(100); // Interval 0 means to refresh as fast as possible
}
void MainWindow::realtimeDataSlot()
{
timeCounter+=10;
QByteArray data1;
data1=reader._read_callback();
int sz = data1.size();
int value0;
int value2=800;
int ssz=0;
for(int ii=0;ii<sz;ii++)
if((int)data1[ii] != 13 && (int)data1[ii] != 10)
{
value0=(int)data1[ii];
ssz++;
//fct add graph
ui->customPlot->graph(0)->addData(timeCounter, value0);
buf.push(value0);
ui->customPlot->graph(2)->addData(timeCounter, buf.get_SCL());
cout<<value0<<" "<<buf.get_SCL()<<endl;
}
if(timeCounter>=800)
{
timeCounter = 0;
ui->customPlot->graph(1)->clearData();
ui->customPlot->graph(1)->addData(*(ui->customPlot->graph(0)->data()));
ui->customPlot->graph(0)->clearData();
ui->customPlot->graph(3)->clearData();
ui->customPlot->graph(3)->addData(*(ui->customPlot->graph(2)->data()));
ui->customPlot->graph(2)->clearData();
}
else {
ui->customPlot->graph(4)->addData(timeCounter, value2);
ui->customPlot->xAxis->setRange(0,800);
ui->customPlot->yAxis->setRange(-300, 1024);
}
ui->customPlot->graph(1)->removeData(timeCounter, timeCounter+50);
ui->customPlot->graph(3)->removeData(timeCounter, timeCounter+50);
ui->customPlot->replot();
}
void MainWindow::deplasare()
{
}
MainWindow::~MainWindow(){
delete ui;
}
I einen Schlitz in Hauptfenster gemacht: void MainWindow::deplasare()
, um den Schieber mit dem Signal zu verbinden, aber ich kann den Inhalt dieser Funktion nicht herausgefunden.
Danke, es funktioniert gut, außer einer Sache: die Daten, die folgen, werden mit den alten Werten – Ana
geplottet. Dann sollten Sie eine Spur auch behalten, wenn Sie neue Punkte hinzufügen. Behalte 'offset' als Mitglied deiner Klasse und aktualisiere es jedes Mal mit dem neuen Wert, wenn' deplasare' aufgerufen wird. Und wenn Sie neue Werte hinzufügen, fügen Sie sie einfach mit "value + offset" hinzu. –