Qt实时图表数据更新:解析void serial::realtimeDataSlot()函数

本篇解析Qt环境下,用于实时更新图表数据的槽函数void serial::realtimeDataSlot()

void serial::realtimeDataSlot()
{
  static QTime time(QTime::currentTime());
  static QDateTime datetime(QDateTime::currentDateTime());
  // 计算两个新数据点:
  double key = time.elapsed()/1000.0; // 自演示开始以来经过的时间(以秒为单位)
  static double lastPointKey = 0;
  float temp_float,time_inter;

  if(fre_flag==1||fre_flag==2)  time_inter=0.35;// 频率、幅值的更新时间
  else if(fre_flag==3) time_inter=0.00032;// 采样数据的更新时间1/3125Hz
  else time_inter=0.0;

  if (key-lastPointKey > time_inter)
  {
    // 向线添加数据:
      if(fre_flag==1) temp_float=fre_data;
      else if(fre_flag==2)  temp_float=amp_data;
      //else if(fre_flag==3)  temp_float=samp_data;
      else temp_float=0.0;

      if(fre_flag==3)
      {
          ui->dataView->graph(0)->addData(key, temp_float);
          // 重新缩放值(垂直)轴以适应当前数据:
          ui->dataView->graph(0)->rescaleValueAxis();
      }
      else
      {
          ui->ampView->graph(1)->addData(key, temp_float);
          // 重新缩放值(垂直)轴以适应当前数据:
          ui->ampView->graph(1)->rescaleValueAxis();
      }
    lastPointKey = key;
  }
  // 使关键轴范围随数据滚动(以 8 的恒定范围大小):
  ui->ampView->xAxis->setRange(key, 8, Qt::AlignRight);
  ui->ampView->replot();
}

代码解析:

  1. 获取当前时间: 代码首先获取当前时间,用于计算时间间隔和作为图表数据的X轴坐标。
  2. 计算时间间隔: 根据不同的 fre_flag 值,设置不同的时间间隔 time_inter,表示数据更新的频率。
  3. 添加数据: 如果时间间隔大于设定的更新时间,则根据 fre_flag 的值选择不同的数据源,将新的数据点添加到相应的图表中。
  4. 设置坐标轴范围: 根据最新的数据点更新X轴的范围,确保图表能够显示最新的数据。
  5. 刷新图表: 调用 replot() 函数刷新图表,使新的数据点显示在图表上。

不同频率标志的影响:

  • fre_flag == 1fre_flag == 2 时,更新频率较低,适用于显示频率和幅值等变化相对缓慢的数据。
  • fre_flag == 3 时,更新频率较高,适用于显示采样数据等变化较快的数据。

总结:

void serial::realtimeDataSlot() 函数通过定时获取数据、更新图表内容,实现了Qt应用程序中图表的实时数据更新功能。该函数清晰地展示了如何利用Qt框架提供的类和函数进行图表编程,并通过不同的频率标志控制数据更新的频率,以适应不同的应用场景。

Qt实时图表数据更新:解析void serial::realtimeDataSlot()函数

原文地址: https://www.cveoy.top/t/topic/jnWT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录