我正在試圖製作一個實時讀取數據的圖表。我從Qt開始提供的名爲「動態樣條」的例子開始。QTCharts,當實時數據進入時,我該如何讓圖表沿着x軸?
我遇到的問題是,滾動()函數似乎滾動像素,並且似乎沒有任何函數在Qt中,我可以找到滾動數據。因此,除非我得到像素滾動計數完全正確,否則我的情節增長直到結束不再可見,或者圖表通過將情節線留在後面而滾動。
這對我來說是一個非常明顯的功能,每個人都可以使用動態圖表,所以我只是問了一個問題:Qt圖表中的哪些功能我缺少這個功能?
我所有的搜索都是徒勞的,我甚至都沒有找到關於如何在Qt圖表中使用動態數據收集的教程。
#include "chart.h"
#include <QtCharts/QAbstractAxis>
#include <QtCharts/QSplineSeries>
#include <QtCharts/QValueAxis>
#include <QtCore/QTime>
#include <QtCore/QDebug>
Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags):
QChart(QChart::ChartTypeCartesian, parent, wFlags),
m_series(0),
m_axis(new QValueAxis),
m_step(0),
m_x(10),
m_y(1)
{
qsrand((uint) QTime::currentTime().msec());
QObject::connect(&m_timer, SIGNAL(timeout()), this, SLOT(drawChart()));
m_timer.setInterval(1000);
m_series = new QSplineSeries(this);
QPen green(Qt::red);
green.setWidth(3);
m_series->setPen(green);
m_series->append(m_x, m_y);
addSeries(m_series);
createDefaultAxes();
setAxisX(m_axis, m_series);
// m_axis->setTickCount(11);
axisX()->setRange(0, 100);
axisY()->setRange(-5, 10);
m_timer.start();
elapsedTime.start();
}
Chart::~Chart()
{
}
void Chart::drawLine(qreal &x, qreal &y)
{
m_series->append(x, y);
}
qreal Chart::getTime()
{
return elapsedTime.elapsed()/100;
}
void Chart::drawChart()
{
qreal x = plotArea().width()/m_axis->tickCount();
qreal y = (m_axis->max() - m_axis->min())/m_axis->tickCount();
m_x = getTime();
m_y = qrand() % 5 - 2.5;
drawLine(m_x, m_y);
scroll(x, 0);
qDebug() << getTime();
}
該代碼非常簡單,現在它的繪圖,但行和滾動完全不在水槽。因爲我想用時間作爲我的X軸,並且不能使用漂亮的不可縮放的方式,所以這個例子已經設置好了。
現在,它只是繪製一個隨機數字。我不打擾它餵養它的實際數據,直到我得到這個滾動的東西排序。
在此先感謝您的幫助。如果你知道關於Qt圖表的一些很好的教程,我將不勝感激。 Qt教程,無論如何,都很難找到。
最大不一定得到顯示。在不改變範圍的情況下,最大值將不受任何投訴地直接從屏幕流出。 – granitdev