QTCharts,当实时数据进入时,我如何使图表遵循x轴
QTCharts, how do I make the chart follow the x-axis as live data comes in?
我正在尝试制作一个实时读取数据的图表。我从Qt提供的称为"动态样条曲线"的示例开始。
我遇到的问题是,scroll()函数似乎可以滚动像素,而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教程,好的教程,无论如何,都很难找到。
我费了很大的劲,把东西扔到墙上看是什么卡住了,我发现滚动不是你应该使用的。您希望将范围与x值绑定,并在每次添加数据时更新它。这确实会迫使图形与数据线一起滚动。
新的问题,Qt中的图表有一个内置的内存泄漏。
不要滚动,而是尝试更改axisX的最大值。
当你进行绘图时,检查下一个点是否高于最大值,如果是,则设置新的最大值:
if (m_x > m_axisX->max())
{
m_axisX->setMax(m_x);
}
相关文章:
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- std::vector的包装器,使数组的结构看起来像结构的数组
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何在全屏模式下(在OpenGL中)使背景透明
- 找到两对数字,使它们的乘积的绝对差最小化
- C / C++ 移位/偏移/向左或向右移动位图?
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 如何使刻度线指向图中的负方向,而不更改轴的编号和标题的位置
- C++:灰度位图标题和实时绘画+opencv图像处理
- 将双缓冲位图与 AlphaBlend 一起使用时出现的问题
- 我想在QT中实时绘制ADC图
- QTCharts,当实时数据进入时,我如何使图表遵循x轴
- 给定有向图和商店位置,放置商店,使从任何城市到最近商店的最大距离最小化
- 为什么Boost图库在删除顶点时会使所有迭代器无效
- 在QCustomPlot中,如何实时绘制相同数据的折线图和条形图
- 当添加一条边时,使提升图仅包含两个顶点
- 没有规则来使目标"类.cpp,"构建/..."需要x86/class.o' 停止。乌班图中的错误
- 如何使updateGL()在QT中实时
- C++11编译器何时会使RVO和NRVO优于移动语义和常量引用绑定
- 导入位图会使我的窗口滞后