2017-03-06 26 views
1

我是Qt的新手,並嘗試使用帶有Qt 5.7的QSplineSeries實現實時繪圖。我需要滾動x軸,因爲每100毫秒都會有新的數據出現。如果我不使用graphSeriesX-> remove(0)清除附加到該系列的舊數據,則CPU使用率達到100%。我找到了兩種滾動x軸的方法。使用Qt5圖表實現實時繪圖

const uint8_t X_RANGE_COUNT = 50; 
const uint8_t X_RANGE_MAX = X_RANGE_COUNT - 1; 
qreal y = (axisX->max() - axisX->min())/axisX->tickCount(); 
m_x += y; 
if (m_x > axisX->max()) { 
    axisX->setMax(m_x); 
    axisX->setMin(m_x - 100); 
} 

if (graphSeries1->count() > X_RANGE_COUNT) { 
    graphSeries1->remove(0); 
    graphSeries2->remove(0); 
    graphSeries3->remove(0); 
} 

上述的問題是,m_x的類型是QREAL,並在一段時間內,如果我保持連續運行演示,將達到它的最大價值和axisX-> SETMAX調用將失敗使得情節不工作了。什麼是解決這個用例的正確方法?

qreal x = plotArea().width()/X_RANGE_MAX; 
chart->scroll(x, 0) 
if (graphSeries1->count() > X_RANGE_COUNT) { 
      graphSeries1->remove(0); 
      graphSeries2->remove(0); 
      graphSeries3->remove(0); 
} 

但是我不清楚在這種情況下如何使用graphSeriesX-> remove(0)調用。該圖將繼續被消除,因爲一旦該系列附加了X_RANGE_COUNT值,if塊將始終爲真,從而刪除第0個值,但滾動以某種方式無法按照手動方式爲x軸工作設置最大值,並且在一段時間後,我沒有圖形。如果我不調用remove,但是我的CPU使用率達到100%,則滾動工作。

有人可以指點我正確的方向如何使用滾動,而使用刪除,以保持CPU使用率低?

回答

0

你是什麼意思的「不工作的方式手動設置最大的X軸作品」?如果將x軸範圍定義在0X_RANGE_MAX之間,則顯示的第二種方法有效。這不是你所追求的嗎?

喜歡的東西:chart->axisX()->setRange(0, X_RANGE_MAX);

1

好像更新數據的QChart是通過void QXYSeries::replace(QVector<QPointF> points)的最佳途徑。從documentation開始,它比清除所有數據要快得多(並且不要忘記使用矢量而不是列表)。文檔中的audio example完全是這樣。用setMin,setMaxsetRange更新軸似乎都使用了很多CPU。我會試着看看這是否是一種解決方法。