Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QTCharts,当实时数据进入时,如何使图表跟随x轴?_C++_Qt_Dynamic_Charts_Qtcharts - Fatal编程技术网

C++ QTCharts,当实时数据进入时,如何使图表跟随x轴?

C++ QTCharts,当实时数据进入时,如何使图表跟随x轴?,c++,qt,dynamic,charts,qtcharts,C++,Qt,Dynamic,Charts,Qtcharts,我正在尝试制作一个能够实时读取数据的图表。我从Qt提供的称为“动态样条线”的示例开始 我遇到的问题是,scroll()函数似乎可以滚动像素,而Qt中似乎没有任何函数可以与数据一起滚动。因此,除非我的像素滚动计数准确无误,否则我的绘图线会一直增长,直到末端不再可见,或者图表会继续滚动,将绘图线留在后面 这对我来说就像是每个人都会在动态图表中使用的一个非常明显的特性,所以我要问一个问题:在Qt图表中,我遗漏了哪些做这件事的特性 我所有的搜索都是徒劳的,我甚至还没有找到如何在Qt图表中使用动态数据收集

我正在尝试制作一个能够实时读取数据的图表。我从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();
}
#包括“chart.h”
#包括
#包括
#包括
#包括
#包括
图表::图表(QGraphicsItem*父,Qt::WindowFlags wFlags):
QChart(QChart::ChartTypeCartesian,parent,wFlags),
m_系列(0),
m_轴(新QValueAxis),
m_步骤(0),
m_x(10),
m_y(1)
{
qsrand((uint)QTime::currentTime().msec());
QObject::connect(&m_定时器,信号(timeout()),this,插槽(drawChart());
m_定时器设置间隔(1000);
m_系列=新QSplineSeries(本);
QPen绿色(Qt::红色);
绿色。设置宽度(3);
m_系列->设置笔(绿色);
m_系列->附加(m_x,m_y);
addSeries(m_系列);
createDefaultAxes();
setAxisX(m_轴,m_系列);
//m_轴->设置滴答数(11);
axisX()->setRange(01100);
axisY()->setRange(-5,10);
m_timer.start();
elapsedTime.start();
}
图表::~Chart()
{
}
空图:抽绳(qreal&x、qreal&y)
{
m_系列->附加(x,y);
}
qreal图表::getTime()
{
返回elapsedTime.appeased()/100;
}
void Chart::drawChart()
{
qreal x=plotArea().width()/m_轴->tickCount();
qreal y=(m_轴->最大值()-m_轴->最小值())/m_轴->滴答数();
m_x=getTime();
m_y=qrand()%5-2.5;
抽绳(m_x,m_y);
滚动(x,0);

qDebug()经过很多努力,我把东西往墙上扔,想看看什么东西卡住了,我发现滚动不是你应该使用的。你想把范围和你的x值联系起来,并在每次添加数据时更新它。这确实会迫使图表和数据线一起滚动


新问题,Qt中的图表存在内置内存泄漏。

经过大量的努力,我发现滚动不是您应该使用的。您希望将范围与x值绑定,并在每次添加数据时更新它。这确实会迫使图表与数据行一起按原样滚动


新问题,Qt中的图表存在内置内存泄漏。

请尝试更改axisX的最大值,而不是滚动

当您进行抽绳时,检查下一个点是否高于最大值,如果是,则设置一个新的最大值:

if (m_x > m_axisX->max())
{
        m_axisX->setMax(m_x);
}

尝试更改axisX的最大值,而不是滚动

当您进行抽绳时,检查下一个点是否高于最大值,如果是,则设置一个新的最大值:

if (m_x > m_axisX->max())
{
        m_axisX->setMax(m_x);
}

最大值不一定会显示出来。如果不更改范围,最大值将立即从屏幕上消失,而不会有任何抱怨。最大值不一定会显示出来。如果不更改范围,最大值将立即从屏幕上消失而不会有任何抱怨。是否要分享您的发现?无需补充。我已停止使用Qt图表。非常痛苦,笨重而缓慢,再加上它像siv一样泄漏内存,我切换到pyqtgraph并完成了我在python中开始做的事情。像往常一样,如果没有其他工作,就用python来做。感谢您的回复。我已经看到一些关于通过QCharts泄漏内存的报告,但这些报告似乎已经得到解决。这个问题什么时候会出现在您身上?关心吗分享你的发现?没什么可补充的了。我停止使用Qt图表。除了痛苦、麻烦和缓慢之外,它还像siv一样泄漏内存,我切换到pyqtgraph并完成了我开始用python做的事情。和往常一样,如果没有其他方法可以用python做。谢谢你的回复。我已经通过QC看到了一些关于内存泄漏的报告但是这些问题似乎已经解决了。这个问题什么时候出现在你的面前?