QtCharts 时间坐标轴以及利用定时器动态绘制图形
2019-01-16 10:18
5899 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DoleH/article/details/86237900
根据定时器动态添加点 其他
文章目录
QtCharts 添加时间坐标轴
QtCharts坐标轴说明
QtCharts 的坐标轴主要有两种,一种是QValueAxis 另外一种就是我们需要的QDateTimeAxis
有时候我们需要绘制与时间相关的数据,如与日期相关的天气数据,或者是随分钟变化的传感器数据等,这样就会用到 QDateTimeAxis 坐标轴
目前网上的一些例子,以及QT自带的例子,基本都是和日期相关的数据,没有找到坐标轴是分钟,秒的案例,踩了一些坑,写下这篇文章
QtCharts初始化操作
如果将来要对x轴时间范围、或者是y轴的范围进行调整,建议在头文件中声明x轴
QDateTimeAxis *axisX_Time ; QValueAxis *axisY_Data;//数据点
然后在折线图中初始化,绑定数据集,就完成了折线图的初始化
axisX_Time = new QDateTimeAxis(this);//时间轴 axisY_Data= new QValueAxis();//数据点 //QDateTimeAxis需要QDateTime的数值格式 QDateTime temp_StartTime(QDate(2000, 1, 1), QTime(0, 0, 0)); //前面是年月日,后面是小时、分钟、秒 QDateTime temp_EndTime(QDate(2000, 1, 1), QTime(0, 20, 0));// axisX_Time->setTickCount(5);//设置显示的时间个数 axisX_Time->setRange(temp_StartTime, temp_EndTime);//设置显示方位 //坐标轴显示方式: 分钟:秒 axisX_Time->setFormat("mm:ss");//如果需要其他时间也可以进行修改 axisY_Data->setRange(0,200); //最后绑定数据即可 dataSeries->attachAxis(axisX_Time); dataSeries->attachAxis(axisY_Data);
- 这里有一个坑,就是关于QDateTime的,如果初始化输入QDate和QTime时间不正确,那么QDateTime也是错误的,并且不会报错;
- 比如QDate如果是(2000,0,1),不会提示错误,但是其实显示的数值会一直是错误的
根据定时器动态添加点
为了实现传感器数据随时间的变化,每秒进行绘制,需要添加一个定时器,设置1s的任务,往chart中添加一个数据。
添加一个定时器
timeCount = 0;//在头文件中添加一个全局变量,记录秒数 trainingTimer = new QTimer(this); connect(trainingTimer, SIGNAL(timeout()), this, SLOT(oneSecondAction()));//连接槽函数,一秒激发一次槽函数 trainingTimer->start(1000);//1000ms之行一次
设置每秒的任务
//定期器启动后,1s执行一次的任务 void MyWidget::oneSecondAction() { //******* 每秒绘制折线图一次 ******* addOnePointToChart(dataSeries, timeCount, addData);//addData来自于传感器赋值的数据 timeCount++;//秒数+1 }
在chart上添加一个点
- 方法一,这是之前的一种方法,将秒数手动转为时分秒形式
//在折线图上添加一个点 //输入参数说明 //targetSeries:目标曲线集 //secondCount:秒数。即数据添加的横坐标 //y_value:数据的大小 void MyWidget::addOnePointToChart(QLineSeries *targetSeries, int secondCount, int y_value) { int second, hour, minute; second = secondCount; MyHelper::changeTimeFromSecond(&hour, &minute, &second);//转换为标准的时分秒,保证QTime不会出错 QDateTime temp_AddTimePos(QDate(2000, 1, 1), QTime(hour, minute, second));//生成一个坐标轴时间QDateTime targetSeries->append(temp_AddTimePos.toMSecsSinceEpoch(), y_value); }
将秒数转换为时分秒的函数
static void changeTimeFromSecond(int *hour, int *minute, int *second) { *hour = *second / 3600; *minute = (*second - *hour * 3600) / 60; *second -= *hour * 3600 + *minute * 60; }
- 方法二利用addSecs()函数更加简单
void MyWidget::addOnePointToChart(QLineSeries *targetSeries, int secondCount, int y_value) { QDateTime temp_AddTimePos(QDate(2000, 1, 1), QTime(0, 0, 0).addSecs(secondCount));//生成一个坐标轴时间QDateTime targetSeries->append(temp_AddTimePos.toMSecsSinceEpoch(), y_value); }
如果坐标轴发现时间从分钟变成了小时,需要对坐标轴进行一下修改
//坐标轴显示方式: 小时:分钟:秒 axisX_Time->setFormat("hh:mm:ss");
其他
- 在尝试中发现这里的QTime设置时间分钟数不能超过60,如果要实现纯分:秒显示还需要探索(利用上面方法二就可以完美解决)
- 因为项目的开发。这里还有一个QtCharts绘制动态心电图
- 下一步还有一个根据传感器数据实时绘制心电图
相关文章推荐
- Qt中利用定时器QTimer准实时显示当前日期和时间
- Qt中利用定时器QTimer准实时显示当前日期和时间
- Qt中利用定时器QTimer准实时显示当前日期和时间
- Qt之绘制折线图:图标以及坐标轴设置
- 利用QT来实现基本图形的绘制应用
- Qt利用QPainter绘制心形以及Qt设置透明窗体的四种方法
- 使用QT搭建点云显示框架系列五·基于QT的QML图像选点、动态绘制十字丝功能 ,以及纹理映射
- Qt 利用 Qwt 绘制动态曲线
- Qt中利用定时器QTimer准实时显示当前日期和时间(有自己的思考)
- Qt中利用定时器QTimer准实时显示当前日期和时间
- Qt中利用定时器QTimer准实时显示当前日期和时间
- 利用mfc动态画圆(已知圆心坐标,半径,以及每次转过的角度)
- silverlight2中的定时器,以及如何动态改变控件的坐标
- Qt坐标系统与图形绘制
- Qt中利用定时器QTimer准实时显示当前日期和时间 .
- 定时器的使用,显示时间以及延时提示框
- android 绘制折线图(AChartEngine)Linechart 动态更新横轴为获取的当前时间
- 制作能够显示数学公式以及进行交互式图形绘制的静态页面
- 一则通过Android Canvas动态绘制图形的实例介绍
- 如何在DeepEarth中进行图形绘制(点、线、多边形以及自定义图片图层)