QT QCustomPlot. Eigenes Array



  • Hallo,

    ich möchte eine eigene Datenreihe also ein simples Array in per QCustomPlot anzeigen lassen. Es gibt im Downlaod http://qcustomplot.com/ ein example namens "interactions" was perfekt für mich ist. Dies will ich einfach so umbauen, dass eben statt einem Zufallsdiagramm ein eigenes Array angezeigt wird. Ich glaube das ist eigentlich total einfach aber ich komme da als Newbie nicht weiter.

    Ich vermute der Teil mit QVector hat damit was zu tun aber ich verstehe nicht wieso im Original da 2 Arrays gebildet werden obwohl nur eins für eine Datenreihe nötig wäre...

    (habe keine Funktion hier im Forum für Datenuploads gefunden sonst hätte ich das ganze example mit allen Dateien mal als zip angehängt)

    Aber hier der relevante Teil vom Code wo im Original Zufallsdiagramme gebildet werden. Ich will einfach nur das ein simples Array wie int x[5] = {2, 5, 6, 8, 4}; angezeigt wird. Hat jemand eine Idee? Ich vermute das QVector<double> x(n), y(n); relevant ist.Ich habe es als Newbie leider nicht hinbekommen einfach ein Array wie int x[5] = {2, 5, 6, 8, 4}; reinzubekommen.

    //-----------------------------------------------------------------------------------------------------------------------
    // original
    void MainWindow::addRandomGraph()
    {
      int n = 50; // number of points in graph
      double xScale = (rand()/(double)RAND_MAX + 0.5)*2;
      double yScale = (rand()/(double)RAND_MAX + 0.5)*2;
      double xOffset = (rand()/(double)RAND_MAX - 0.5)*4;
      double yOffset = (rand()/(double)RAND_MAX - 0.5)*5;
      double r1 = (rand()/(double)RAND_MAX - 0.5)*2;
      double r2 = (rand()/(double)RAND_MAX - 0.5)*2;
      double r3 = (rand()/(double)RAND_MAX - 0.5)*2;
      double r4 = (rand()/(double)RAND_MAX - 0.5)*2;
      QVector<double> x(n), y(n);
      for (int i=0; i<n; i++)
      {
        x[i] = (i/(double)n-0.5)*10.0*xScale + xOffset;
        y[i] = (qSin(x[i]*r1*5)*qSin(qCos(x[i]*r2)*r4*3)+r3*qCos(qSin(x[i])*r4*2))*yScale + yOffset;
      }
    
      ui->customPlot->addGraph();
      ui->customPlot->graph()->setName(QString("New graph %1").arg(ui->customPlot->graphCount()-1));
      ui->customPlot->graph()->setData(x, y);
      ui->customPlot->graph()->setLineStyle((QCPGraph::LineStyle)(rand()%5+1));
      if (rand()%100 > 50)
        ui->customPlot->graph()->setScatterStyle(QCPScatterStyle((QCPScatterStyle::ScatterShape)(rand()%14+1)));
      QPen graphPen;
      graphPen.setColor(QColor(rand()%245+10, rand()%245+10, rand()%245+10));
      graphPen.setWidthF(rand()/(double)RAND_MAX*2+1);
      ui->customPlot->graph()->setPen(graphPen);
      ui->customPlot->replot();
    }
    //-----------------------------------------------------------------------------------------------------------------------
    
    //-----------------------------------------------------------------------------------------------------------------------
    // EIGENER TEST
    void MainWindow::addRandomGraph()
    {
    
     QVector<int> x(5), y(5);
    
      x[] = {2, 5, 6, 8, 4};
      //y[] = {6, 3, 2, 1, 6}; ???
    
      ui->customPlot->addGraph();
      ui->customPlot->graph()->setName(QString("New graph %1").arg(ui->customPlot->graphCount()-1));
      ui->customPlot->graph()->setData(x, y);
      ui->customPlot->graph()->setLineStyle((QCPGraph::LineStyle)(rand()%5+1));
      if (rand()%100 > 50)
        ui->customPlot->graph()->setScatterStyle(QCPScatterStyle((QCPScatterStyle::ScatterShape)(rand()%14+1)));
      QPen graphPen;
      graphPen.setColor(QColor(rand()%245+10, rand()%245+10, rand()%245+10));
      graphPen.setWidthF(rand()/(double)RAND_MAX*2+1);
      ui->customPlot->graph()->setPen(graphPen);
      ui->customPlot->replot();
    }
    //-----------------------------------------------------------------------------------------------------------------------
    

    Gruß



  • Ist irgendwie logisch, dass du x und y Werte brauchst. Probiers erstmal mit 1, 2, 3, 4, 5 als x Werte und deinen eigentlichen Werten in y. Die API erwartet wahrscheinlich einen QVector und kein array, also nimm auch einen für deine Daten. Ist sowieso sinnvoller, als mit arrays zu hantieren.



  • Mechanics schrieb:

    Probiers erstmal mit 1, 2, 3, 4, 5 als x Werte und deinen eigentlichen Werten in y. Die API erwartet wahrscheinlich einen QVector und kein array

    Das war der entscheidende Hinweis, Besten Dank!


Anmelden zum Antworten