学习Qt Charts 您所在的位置:网站首页 百度实时搜索曲线 学习Qt Charts

学习Qt Charts

2024-05-25 23:17| 来源: 网络整理| 查看: 265

1、添加坐标轴

按照之前的一篇文章,先在工程中添加QChart、QChartView,代码如下:

Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); chart = new QChart(); ChartView = new QChartView(this); ChartView->setChart(chart); ui->verticalLayout->addWidget(ChartView); }

然后定义两个坐标轴,一个用作X轴,一个用作Y轴, 添加头文件:

#include

创建两个QValueAxis:

QValueAxis *axisX; QValueAxis *axisY;

在构造函数中,对两个坐标轴进行实例化,把X轴范围设置为0-10并放置在坐标系的底部,Y轴范围设置为0-10并放置在坐标系的左边,并且添加到QChart中,如下:

Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); chart = new QChart(); axisX = new QValueAxis(); axisY = new QValueAxis(); chart->addAxis(axisX,Qt::AlignBottom); chart->addAxis(axisY,Qt::AlignLeft); axisX->setTickCount(5); axisX->setRange(0, 10); axisY->setRange(0, 10); ChartView = new QChartView(this); ChartView->setChart(chart); ui->verticalLayout->addWidget(ChartView); }

编译运行,结果如下:

从上图可以看出,成功创建了一个笛卡尔坐标系。

2、使用定时器动态添加数据

这里尝试下使用曲线图,创建一个曲线序列,

添加头文件 #include 在类声明中添加: QSplineSeries *series; 在构造函数中对series进行实例化,并跟之前创建的坐标轴关联起来: series = new QSplineSeries(this); series->attachAxis(axisX); series->attachAxis(axisY);

然后添加定时器:

Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ..... QTimer timer; connect(&timer, &QTimer::timeout, this, &Chart::Timeout_handler); timer.setInterval(1000); } void Dialog::Timeout_handler() { }

首先定义一个整形变量x_index,初始化为0,用来给series序列中的x赋值,定时器每触发一个事件,使用随机数生成函数生成的值给series序列中的y赋值,然后x_index的值加一,主要代码如下:

void Dialog::Timeout_handler() { QDateTime dt; QString current_dt = dt.currentDateTime().toString("yyyy:MM:dd:hh:mm:ss:zzz"); qsrand(dt.currentDateTime().toTime_t()); int y = qrand() % 10; series->append(x_index,y); x_index ++; qDebug()append(x_index,y); if(x_index > 10) axisX->setRange(x_index-10, x_index); x_index ++; }

3. 使用scroll方法

代码如下:

void Dialog::Timeout_handler(){ QDateTime dt; QString current_dt = dt.currentDateTime().toString("yyyy:MM:dd:hh:mm:ss:zzz"); qsrand(dt.currentDateTime().toTime_t()); int y = qrand() % 10; series->append(x_index,y); qreal x = chart->plotArea().width() / 10; if(x_index > 10) chart->scroll(x,0); x_index ++; }

4. 更新全部serial

这种方法是保持序列series的x轴的值不变,都是0-10,改变的是0-10对应的y轴的值,首先定义一个list用来保存获取到的Y轴的值:

QList y_list; void Dialog::Timeout_handler() { QDateTime dt; QString current_dt = dt.currentDateTime().toString("yyyy:MM:dd:hh:mm:ss:zzz"); qsrand(dt.currentDateTime().toTime_t()); int y = qrand() % 10; y_list.append(y); if(y_list.length()>11) y_list.removeFirst(); QList points; points.clear(); for(int i=0;ireplace(points); }

效果如下:

上图中可以看到,图标中的曲线一直在变化,可是X轴的范围保持在0-10,

本文来自博客园,作者:哈拎,转载请注明原文链接:https://www.cnblogs.com/halin/p/14745338.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有