2012-04-20 4 views
0

몇 가지 방정식을 풀고 결과를 OpenGL 창에 표시하는 시뮬레이션을 프로그래밍했습니다. 시뮬레이션은 시간이 지남에 따라 지속적으로 발전합니다. 포인트를 동적으로 추가하고 싶습니다. 나는 다음과 같은 몇 가지 코드를 사용하고 있습니다 :Qt - 결과를 시간에 동적으로 표시합니다.

QwtPlot* plot = new...; 
QwtPlotCurve* plotdata = new...; 
QVector<QPoint> data = getData(); 
plotdata->setSamples(data); 

이 모든 포인트를 재설정 음모를 가져옵니다. 포인트를 단순히 추가 할 수 있습니까? 그것을 할 적 방법이 없다면


:-) 어떤 노력을

덕분에, 나는 그것을 듣고 싶네요. 말해줘, 제발!

+0

Qwt는 실시간 플로팅 예를 들어 있습니다. 거기에서 코드를 복사 하시겠습니까? – rubenvb

답변

0

알아 들었어. 추상적 인 방법으로 그것을 할 방법이 없습니다. 그러나 하나의 방법 불러올 수하십시오 replot (와

void QwtPlotCurve::setRawSamples(); 

을), 그리고이 할 수있는 가장 저렴한 방법이 될 것입니다. 데이터 복사가 필요하지 않습니다.

건배 :)

+0

rubenvb이 쓴 것처럼, Qwt에서 "realtime"이라는 예제는 [QwtPlotDirectPainter'] (http://qwt.sourceforge.net/class_qwt_plot_direct_painter.html)를 사용하여 그래프의 새 지점 만 다시 칠하는 방법을 보여줍니다. – alexisdm

0

조정 가능한 간격의 QTimerQSpinBox과 함께 사용하는 것은 어떻습니까?

QTimer *timer = new QTimer(this); 
    connect(timer, SIGNAL(timeout()), this, SLOT(updatePlot())); 
    timer->start(5000); //adjust from GUI with timer->setInterval(newValue) 


    ... 

    void updatePlot(){ 
     // QSettings initialized somewhere 
     int maxSamples = settings.value("plot/maxSamples", 100).toInt(); 
     QVector<QPoint> data = getData(maxSamples); // get this many samples 
     plotdata->setSamples(data); 

    } 
+0

이것은 전체 음모를 몇 번이고 다시 반복하지 않습니까? 내 프로그램은 초당 50 포인트, 즉 모든 새 포인트는 20 밀리 초 정도를 필요로합니다. 그다지 빠를 필요는 없지만 개념적으로 시뮬레이션은 많은 시간이 걸릴 포인트를 가지고 있습니다. 20000 포인트를 초과 할 때 포인트를 제거하기 위해 FIFO 기술을 사용하기 전에 20000 포인트의 누적이 예상됩니다. 너 생각하니? –

관련 문제