2017-03-24 45 views
1

私はグラフを使用したいデータを生成していますQChart &お友達。これは初めてQChartを使用しているので、基本的にはQLineSeries Exampleをコピーして自分のニーズに合わせて修正しました。私は私が私の新しいデータがグラフに表示することが期待されるこのコードを実行するとQLineSeriesにデータを追加した後、QChartを更新/再描画する方法は?

quint64 last=0; 
    quint64 *lastp=&last; 

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
    , ui(new Ui::MainWindow) 
    , series(nullptr) 
{ 
    ui->setupUi(this); 
    QChart *chart = new QChart(); 
    series=new QLineSeries(chart); 
    chart->legend()->hide(); 
    chart->addSeries(series); 
    chart->createDefaultAxes(); 
    chart->setTitle("Simple line chart example"); 
    QChartView *chartView = new QChartView(chart); 
    chartView->setRenderHint(QPainter::Antialiasing); 
    setCentralWidget(chartView); 
    GeneticTask *gTask = new GeneticTask(); 
    connect(gTask, &GeneticTask::point, this, [=](QPointF pt) { 
     // New point added to series 
     *series<<pt; 
     // Limit updates to once per second 
     quint64 now=QDateTime::currentMSecsSinceEpoch(); 
     if(now-(*lastp)>1000) { 
      qDebug()<<"UPDATE"; 
      // [A] WHAT TO PUT HERE TO HAVE CHART REDRAW WITH NEW DATA? 
      *lastp=now; 
     } 
    } 
    ); 
    QThreadPool::globalInstance()->start(gTask); 
} 

が、それは、そう私の質問はありません:私の現在のコードは次のようになりますどのように私は、チャートの更新を持つことができます新しいデータを表示するには?つまり、コメントに[A]が記載されているコードにはどうすればよいですか?

答えて

2

オペレータ<<またはappendを使用してQLineSeriesに値を追加すると、グラフが再描画されます。何らかの理由でそれが起こらない場合は、QChartViewrepaintメソッドを呼び出すことができます。ここで

は、それが最大1秒に1回のキャップで追加されると、データを中心に説明するいくつかのコードです:注意点としては

// Global or class scope or 
qreal max=-10000000000; 
qreal min=-max; 
qreal *maxp=&max; 
qreal *minp=&min; 

// Same scope as before 
connect(gTask, &GeneticTask::point, this, [=](QPointF pt) { 
     if(pt.y()>*maxp) { 
      *maxp=pt.y(); 
     } 
     if(pt.y()<*minp) { 
      *minp=pt.y(); 
     } 
     *series<<pt; 
     quint64 now=QDateTime::currentMSecsSinceEpoch(); 
     if(now-(*lastp)>1000) { 
      qDebug()<<"UPDATE"; 
      chart->axisX()->setRange(0,series->count()); 
      chart->axisY()->setRange(*minp,*maxp); 

      *lastp=now; 
     } 
    } 
); 
+1

、データが追加され、更新されたが、私は手動に持っていたされていました新しいデータを中心に私はあなたの答えに詳細を追加する自由を取った。 –

+0

また、chart-> createDefaultAxes();を使用することもできます。 – Damien

関連する問題