2

同じグラフに 3 つのリアルタイム シグナルがありますが、それらが重なり合うことがあります。それらを y 軸に沿って上下に動かして見やすくするには、スライド ボタンが必要です。スライドをグラフに接続するにはどうすればよいですか? スライドの値が変化するときのように、信号のデータは real_y_values+slide_value? でグラフに追加されます。これは mainwindow.cpp です:

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;
     }

スライドを信号に接続するために、MainWindow: void MainWindow::deplasare()にスロットを作成しましたが、この関数の内容がわかりません。

4

1 に答える 1

0

まず、QSlider の操作方法を理解するためにこれを見てください。
そこから、次のように変更する必要があることを理解する必要がありますconnect

connect(ui->verticalSlider,SIGNAL(valueChanged(int)),this,SLOT(deplasare(int)));

グラフの 1 つに何らかのオフセットを作成する場合は、このオフセットをすべてのデータ ポイントに追加して再プロットする必要があります。でそれを行う例を次に示しますui->customPlot->graph(0)

void MainWindow::deplasare(int offset){
    QCPDataMap *dataMap = ui->customPlot->graph(0)->data();
    for (QMap<double,QCPData>::iterator it = dataMap->begin(); it != dataMap->end(); ++it){
        it.value().value += offset;
    }
    ui->customPlot->replot();
}

上記の内容についての説明:データは保持されている
ため、実際には. グラフ内のすべてのデータ ポイントに追加するために、 を反復処理し、すべてのに追加します。QCPGraphQCPDataMapQMap<double,QCPData>offsetQMapoffsetQCPData::value

于 2016-06-12T11:11:50.257 に答える