【问题标题】:QChart Real Time PlotterQChart 实时绘图仪
【发布时间】:2023-02-19 08:55:47
【问题描述】:

我正在尝试使用 QChart 生成正弦波并将其显示在图表上。实际上一切正常。然而,当滚动数据时,有时很快,有时很慢,甚至在程序开始时,它正确显示并随着时间的推移离开屏幕。我无法找出问题的根源,任何想法和建议都会对我有很大帮助。

在我的算法中有一个计时器。当计时器满时,依赖于 x 值的 1 个以上的函数起作用,新点被添加到系列中。在这个过程之后,我尝试滚动到一定程度。

我的定时器功能:

void MyChartView::handleTimeout() {

    m_x += 1;
    m_y = (amplitude * sin(period * (m_x + horizontalShift)) + verticalShift);

    m_series->append(m_x, m_y);

    qDebug() << "New Data -> m_x: " << m_x << " m_y: " << m_y;
    qDebug() << "Plot area width: " << chart->plotArea().width() << " tickCount: " << m_axisX->tickCount();

    if (m_x > 10) {
        chart->scroll(chart->plotArea().width() / m_x, 0);
    }

    this->update();
}

截屏:

我想要的是在数据末尾有一些空间连续滚动。

谢谢。

【问题讨论】:

    标签: c++ qt qtcharts


    【解决方案1】:

    查看动态样条示例 - https://doc.qt.io/qt-6/qtcharts-dynamicspline-example.html。它像下面这样初始化 QChart:

    Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags):
    QChart(QChart::ChartTypeCartesian, parent, wFlags),
    m_series(0),
    m_axisX(new QValueAxis()),
    m_axisY(new QValueAxis()),
    m_step(0),
    m_x(5),
    m_y(1) {
    

    然后它根据变化滚动(使用随机数生成器):

    void Chart::handleTimeout() {
    qreal x = plotArea().width() / m_axisX->tickCount();
    qreal y = (m_axisX->max() - m_axisX->min()) / m_axisX->tickCount();
    m_x += y;
    m_y = QRandomGenerator::global()->bounded(10) - 2.5;
    m_series->append(m_x, m_y);
    scroll(x, 0);
    if (m_x == 100)
        m_timer.stop();
    }
    

    m_x() 成员初始值设定项定义了添加数据时要有多少空间。在这种情况下,将有 5 个单位的差距,因为范围是 m_axisX-&gt;setRange(0, 10); 是 10 个单位。滚动功能本质上是基于plotArea().width() / m_axisX-&gt;tickCount(); 每次滚动。

    因此,要为您的图表添加空间,只需将 m_x 初始化为小于 m_axisX 范围最大值。

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2016-12-12
      • 2011-06-09
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多