4、QtCharts 做心电图

文章目录

  • ui界面
  • 核心代码
  • 全部代码

4、QtCharts 做心电图_第1张图片

ui界面

4、QtCharts 做心电图_第2张图片

4、QtCharts 做心电图_第3张图片

核心代码

void Dialog::slot_timer()
{
    qreal xOffset=0.f;//x的偏移量,推进的距离
    qreal dIncrease=10;//增加量
    //数据
    for(int i=0;i<10;i++)
    {
        m_x+=dIncrease;
        xOffset+=dIncrease;
        m_splineSerise->append(m_x,qrand()%10);//根据实际情况删除多余数据
    }

    //删除多余数据
    if(m_splineSerise->count()>c_MaxSize)
    {
        m_splineSerise->removePoints(0,m_splineSerise->count()*0.5-c_MaxSize);//删除多余数据
    }


    //计算x周每个单位的宽度
    qreal xUnit =m_chart->plotArea().width()/(m_axisX->max()-m_axisX->min());
    qreal xScroll =xOffset*xUnit;

    m_chart->scroll(xScroll,0);//对x轴进行滚动

}

全部代码

#include "dialog.h"
#include "ui_dialog.h"

const quint32 c_MaxSize=1000;//数据个数

Dialog::Dialog(QWidget *parent)
    :QDialog(parent)
    ,ui(new Ui::Dialog)
    ,m_x(0.f)
    ,m_splineSerise(NULL)
{
    ui->setupUi(this);


    //构建曲线系列
    m_splineSerise=new QSplineSeries(this);

    //为折线图添加初始数据:第一个位置决定了心电图的曲线终点位置
    m_x=1000;
    m_splineSerise->append(m_x,1);


    //构建图标对象
    m_chart=new QChart();

    //注意:先添加到图表再创建坐标轴,否则无效

    //1.将折线系列添加到图表
    m_chart->addSeries(m_splineSerise);

    //构建坐标轴
    m_axisX = new QValueAxis();
    m_axisX->setRange(0,c_MaxSize);
    m_axisX->setTitleText(QStringLiteral("X"));//设置标题
    m_axisX->setLabelFormat("%g");//设置格式
    m_axisX->setTickCount(5);//设置刻度数
    m_axisY= new QValueAxis();
    m_axisY->setRange(-10,10);
    m_axisY->setTitleText(QStringLiteral("Y"));

    //将坐标轴绑定
    m_chart->setAxisX(m_axisX,m_splineSerise);
    m_chart->setAxisY(m_axisY,m_splineSerise);

     //隐藏图例
     m_chart->legend()->hide();


    //设置图标主题
    m_chart->setTheme(QtCharts::QChart::ChartThemeBlueCerulean);
    //设置标题
    m_chart->setTitle(QString("图表1"));
    //设置尺寸
    m_chart->setGeometry(0,0,500,300);


    //构建场景
    m_pScene =new QGraphicsScene(this);

    //为视图构建场景
    ui->graphicsView->setScene(m_pScene);

    //将图表添加到场景
    m_pScene->addItem(m_chart);

    //设置抗锯齿
    ui->graphicsView->setRenderHint(QPainter::Antialiasing,true);


    //构造定时器
    m_timer=new QTimer(this);
    m_timer->setInterval(100);//设置定时器间隔
    //绑定定时器
    connect(m_timer,&QTimer::timeout,this,&Dialog::slot_timer);
    m_timer->start();


}

Dialog::~Dialog()
{
    m_chart->removeAllSeries();
    delete ui;
}

qreal Dialog::getData(qreal x)
{
    return qSin(x*2*M_PI)*7;
}

void Dialog::slot_timer()
{
    qreal xOffset=0.f;//x的偏移量,推进的距离
    qreal dIncrease=10;//增加量
    //数据
    for(int i=0;i<10;i++)
    {
        m_x+=dIncrease;
        xOffset+=dIncrease;
        m_splineSerise->append(m_x,qrand()%10);//根据实际情况删除多余数据
    }

    //删除多余数据
    if(m_splineSerise->count()>c_MaxSize)
    {
        m_splineSerise->removePoints(0,m_splineSerise->count()*0.5-c_MaxSize);//删除多余数据
    }


    //计算x周每个单位的宽度
    qreal xUnit =m_chart->plotArea().width()/(m_axisX->max()-m_axisX->min());
    qreal xScroll =xOffset*xUnit;

    m_chart->scroll(xScroll,0);//对x轴进行滚动

}

你可能感兴趣的:(qt)