前一篇笔记中实现了QT的Label控件显示CPU的温度,只能显示当前的温度,并不能反映CPU温度的变化情况,现在来实现使用QT Charts的曲线图实现一个实时曲线来显示CPU的温度。

添加对Qt Chart的支持

在原来的工程的中的pro文件中添加:

QT += charts

dialog.h中添加Qt Charts的相关头文件,并添加Qt Charts的命名控件

#include <QtCharts/QChartGlobal>

QT_CHARTS_USE_NAMESPACE

在类声明中添加相关变量:

QChart *chart;
QChartView *ChartView;
QSplineSeries *series; QList<double> temp_list;
uint16_t index;

上面的几个变量的前3个是Qt Charts中的类,下面3个是实现实时曲线中用到的变量。

初始化Qt Charts部分

首先实例化QChart,并隐藏了图例,把图表标题设置为CPU temperature

    QChart *chart = new QChart();
chart->legend()->hide();
chart->setTitle("CPU temperature");

接着创建两个坐标轴:x,y轴,分别添加到QChart的左边跟底部,X轴范围设置为:0-100,意思是QChart可见区域有101个点,Y轴范围设置为:20-80,意思是可现实的温度最小值为20摄氏度,最大值为80摄氏度。代码如下:

    QValueAxis *axisX = new QValueAxis();
QValueAxis *axisY = new QValueAxis();
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft); axisX->setRange(0, 100);
axisY->setRange(20, 80);

然后实例化曲线序列、添加到QChart中,并跟坐标轴关联起来:

    series = new QSplineSeries();
chart->addSeries(series);
series->attachAxis(axisX);
series->attachAxis(axisY);

最后实例化QChartView并把QChart实例添加到QChartView中:

    ChartView = new QChartView(chart);
ChartView->setRenderHint(QPainter::Antialiasing);
ui->container->addWidget(ChartView);

实现更新QChart函数

实现实时曲线的原理是,创建一个QList用作缓存:

QList<double> temp_list;

temp_list最多存储101个数据,当temp_list中的数据少于101时,有新数据的时候,把新数据添加到temp_list尾部,然后使用QSplineSeries的replace方法更新QSplineSeries的数据,如果temp_list中有了101个数据时,有新数据的话,先使用QList的removeFirst的方法删除temp_list第一个数据,然后使用append方法给temp_list添加数据,最后使用QSplineSeries的replace方法更新QSplineSeries的数据,就可以实现实时曲线了,代码如下:

void Dialog::update_chart(double temperature)
{
QList<QPointF> point_temp;
point_temp.clear();
temp_list.append(temperature);
if(temp_list.length() > 100)
{
temp_list.removeFirst(); for(int i=0;i<100;i++)
{
QPointF node(i,temp_list.at(i));
point_temp.append(node);
}
}else {
for(int i=0;i<temp_list.length();i++)
{
QPointF node(i,temp_list.at(i));
point_temp.append(node);
}
}
series->replace(point_temp);
}

运行结果如下:

在arm Linux 中运行

同样是没修改代码,交叉编译后,在arm linux下运行如下:

Linux 中使用 QT Charts 显示温度传感器的更多相关文章

  1. Linux中使用QT读取并显示温度传感器数值

    环境: Ubuntu 16.04 64 bit QT5.13.1/QT5.12 原理 对于Linux来说一切都是文件,温度传感器也是个文件,如果要获取某个温度传感器的数值,可以读取相应的文件,Linu ...

  2. Qt Charts

    简述 Qt Charts模块提供了一套易于使用的图表组件.它采用了Qt Graphics View框架,因此图表可以很容易地集成到现代的用户界面. Qt Charts可以被用作QWidgets.QGr ...

  3. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容

    [Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...

  4. Linux中Qt的安装

    1.下载Ot安装包 Qt5.30的下载地址如下,在网页中打开找到需要的资源,下载.run格式的安装软件. http://download.qt.io/archive/qt/5.3/5.3.0/qt-o ...

  5. CMake中添加Qt模块的合理方法

    https://www.jianshu.com/p/7eeb6f79a275 转载自这里 用CMake来组织的工程中要用Qt首先要设置.找到Qt相关模块.主要是通过find_package这个CMak ...

  6. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  7. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  8. Qt Charts示例

    Qt 5.7 有一些变化,把原来商业版的几个模块用GPLv3协议放到了社区版本里: Qt Charts (GPLv3) Qt Data Visualization (GPLv3) Qt Virtual ...

  9. 在Linux上进行QT UI开发

    在QT Creator UI编辑器上通过拖拽各种控件产生UI界面,然后点击编译/Build按钮,会自动生成对应的ui_xxxx.h的 头文件/header file. 参考: 1.Linux上使用Qt ...

随机推荐

  1. Pytorch_Part1_简介&张量

    VisualPytorch beta发布了! 功能概述:通过可视化拖拽网络层方式搭建模型,可选择不同数据集.损失函数.优化器生成可运行pytorch代码 扩展功能:1. 模型搭建支持模块的嵌套:2. ...

  2. 服务治理演进剖析 & Service Mesh、 xDS核心原理梳理

    基于XDS协议实现控制面板与数据面板通信分享 基于这段时间在同程艺龙基础架构部的蹲坑,聊一聊微服务治理的核心难点.历史演进.最新动态, 以上内容属自我思考,不代表同程艺龙技术水准.如理解有偏差.理解不 ...

  3. 【转载】Pycharm调试高效,还是pdb调试高效? (在服务端)

    https://segmentfault.com/q/1010000005067119 Pycharm调试高效,还是pdb调试高效? (在服务端)  python  3.9k 次浏览 问题对人有帮助, ...

  4. top命令查看CPU状态信息:%us、%sy、%ni、%id、%wa、%hi、%si、%st 表示的是什么意思

    Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义 2018-08-26 分类:Linux 评论(0)   缙哥哥发现用了雅黑的探针,在 Linux 的 C ...

  5. 利用IOzone进行存储性能测试

    利用IOzone进行存储性能测试   命令:1.iozone -s 10G -r 4k -i 0(0代表顺序写) -w(代表文件不删除) -+n(不测重读重写) -Rb(以某种格式生成测试文件) /t ...

  6. 云计算OpenStack共享组件---Memcache缓存系统(3)

    一.缓存系统 1.静态web页面: (1)在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request), ...

  7. OSI 七层参考模型与 TCP/IP 四层协议

    OSI 七层参考模型 OSI (Open System Interconnect,开放系统互连参考模型)是由 ISO(国际标准化组织)定义的,它是个灵活的.稳健的和可互操作的模型,并不是协议,常用来分 ...

  8. Linux shell脚本全面学习(一)

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...

  9. 三大主流开源硬件对比:Arduino vs Raspberry Pi vs BeagleBone

    http://www.elecfans.com/emb/361236_3.html 下文摘自上面的链接 软硬件整合是今年一再被提及的话题,如今我们也可以看到不少硬件创业的成功案例,比如Jawbone ...

  10. ASP.NET Core MVC 入门到精通 - 3. 使用MediatR

    ASP.NET Core MVC 入门到精通 - 3. 使用MediatR 环境: .NET 5 ASP.NET Core MVC (project) 1. MediatR MediatR .NET中 ...