《Q开发》 基于QtCharts的实时曲线绘制

一、知识点汇总

Qt中提供了Qt Charts图表模块,可以很方便的绘制折线图、柱形图、饼图等图表。

绘制折线图常用的类有:QChartView、QChart、QLineSeries、QValueAxis等

QChartView:QChart的视图组件,常用的函数有:

void setChart(QChart *chart)设置QChart对象作为显示的图表。

void setRubberBand(const RubberBands &rubberBand)设置鼠标在视图组件上拖动选择范围的方式。

RubberBands 为枚举类型,可取如下值:
QChartView::NoRubberBand ——未指定缩放区域,因此不启用缩放。
QChartView::VerticalRubberBand——只启用指定区域的垂直方向的缩放。
QChartView::HorizontalRubberBand——只启用指定区域的水平方向的缩放。
QChartView::RectangleRubberBand——启用指定区域的垂直和水平方向的缩放

当设置QChartView的该属性时,鼠标右键实现缩小功能。

QChart:图表组件,常用的函数有:
void  setTitle(const QString &title) 设置图表标题
void  addSeries(QAbstractSeries *series) 添加数据序列
void  setAxisX(QAbstractAxis *axis, QAbstractSeries *series = Q_NULLPTR)设置X轴
void  setAxisY(QAbstractAxis *axis, QAbstractSeries *series = Q_NULLPTR)设置Y轴
void  setTheme(QChart::ChartTheme theme) 设置主题

缩放相关函数
void  zoomIn()
void  zoomIn(const QRectF &rect)
void  zoomOut()
void  zoomReset()
QLineSeries:数据序列类

添加数据点函数
void  append(qreal x, qreal y)
void  append(const QPointF &point)
void  append(const QList<QPointF> &points)
清除全部数据点函数
void  clear()

QValueAxis:数值坐标轴类
void  setRange(qreal min, qreal max) 设置坐标轴范围

二、编程实战

说明:

在VS+Qt中使用Qcharts时,在项目——属性——C/C++——常规的附加包含目录中输入 $(QTDIR)\include\QtCharts, (Release和Debug模式下都需要添加);在项目—属性—链接器—输入的附加目录中输入Qt5Chartsd.lib(Debug)和Qt5Charts.lib(Release)

并在需要使用QtCharts 类的头文件或源程序文件中, 要使用如下的包含语句:

#include <QtCharts>

using namespace QtCharts ;

 

在需要显示中文的源程序文件上面添加如下语句,解决中文乱码问题

#if defined(_MSC_VER) && (_MSC_VER >= 1600) 

# pragma execution_character_set("utf-8") 

#endif

在头文件中添加绘图相关变量和函数的声明,注意添加相应的头文件引用

QChartView *chartView;  

QChart *chart;

QLineSeries *series;

QValueAxis *axisX,*axisY;

QTimer m_timer;   //定时刷新曲线

 

public slots:

void generateData( );  //定时器对应的槽函数

 

在源文件中初始化相关变量和函数

chartView = new QChartView(this); //创建ChartView,包含头文件<qchartview.h>

chart = new QChart();//创建Chart,包含头文件<qchart.h>

chart->setTitle("绘制曲线");  //设置图像标题

//设置chart主题

chart->setTheme(QChart::ChartThemeBlueCerulean);

chart->layout()->setContentsMargins(0,0,0,0);//QChart与View的边距

 

chartView->setChart(chart);  //Chart 添加到ChartView

chartView->setRubberBand(QChartView::RectangleRubberBand);//XY方向同时放大到鼠标画出的矩形大小(也可以设置为只放大X轴或Y轴),右键缩小

 

series = new QLineSeries//序列点

series->setName("序列1");  //图例名称

chart->addSeries(series);

 

axisX = new QValueAxis;    //坐标值

axisY = new QValueAxis;    //坐标值

axisX->setRange(0, 100);   //X轴坐标范围

axisY->setRange(0, 100);   //Y轴坐标范围

chart->setAxisX(axisX, series);//添加坐标轴

chart->setAxisY(axisY, series);

 

//添加布局

QVBoxLayout *vLayout = new QVBoxLayout;

vLayout->setContentsMargins(0, 0, 0, 0);//布局填满窗口

vLayout->addWidget(chartView);

this->setLayout(vLayout);

range = 0;

generateData();

 

//定时器1s产生一组随机数据

void generateData()

{

    series->clear();

    range++;

    for (int i = 0; i <= 100; i++)

    {

        double yValue = 50 * sin(i*3.14 / 25 + range);

        series->append(i, yValue);

    }

}

 

//鼠标滚轮控制缩放

//添加头文件#include <QWheelEvent>

void wheelEvent(QWheelEvent *event);//重写鼠标滚轮事件

 

//在源文件中实现鼠标滚轮放大缩小绘图区域

void lineChartDemo::wheelEvent(QWheelEvent *event)

{

    if (event->delta() > 0)

        chart->zoom(1.1);

    else

        chart->zoom(0.9);

}

运行效果

 

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不相信眼泪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值