我正在试图制作一个实时读取数据的图表。我从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