前一篇笔记中实现了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. CSS3文本样式

    目录 文本阴影 text-shadow 文本轮廓 text-outline 文本换行 word-break normal break-all keep-all word-wrap 新文本属性 text ...

  2. 。 (有些情况下通过 lsof(8) 或 fuser(1) 可以 找到有关使用该设备的进程的有用信息)

    umount时目标忙解决办法 标签(空格分隔): ceph ceph运维 osd 在删除osd后umount时,始终无法umonut,可以通过fuser查看设备被哪个进程占用,之后杀死进程,就可以顺利 ...

  3. 第9章 case条件语句的应用实践

    case语句企业级生产案例 范例9-7:实现通过传参的方式往/etc/openvpn_authfile.conf里添加用户,具体要求如下. 1)命令用法为: USAGE: sh adduser {-a ...

  4. Pycharm搜索导航之文件名、符号名搜索

    1.准备一个工程 向你的工程中添加一个Python文件,并输入一些源码,例如: 2.转到对应文件.类.符号 Pycharm提供的一个很强力的功能就是能够根据名称跳转到任何文件.类.符号所在定义位置. ...

  5. VMware vRealize Network Insight 6.2 发布 - 网络和安全可视化分析

    发现.优化应用安全性和网络连接解决方案并对其进行故障排除 VMware vRealize Network Insight 可帮助您跨混合和多云环境构建经过优化且高度可用的安全网络基础架构.它提供了网络 ...

  6. 2. Servlet3.0注解方式 @WebServlet

    web.xml配置还是比较麻烦,这次使用注解方式 编写servlet import javax.servlet.ServletException; import javax.servlet.annot ...

  7. IP子网如何划分?so easy!

    IP地址与子网掩码 1. IP地址划分 1.1 IP地址 1.2 由两部分组成 1.3 IP地址的分类 1.4 IP地址的规划原则 2.子网掩码划分 2.1 32个二进制位 2.2IP地址和子网掩码作 ...

  8. Linux - fuser 命令

    前言 之前连公司堡垒机的时候发现连不上,找运维排查是建立的链接数太多,很多超时链接没有断掉,导致不能再创建链接 此时,需要手动断开用户终端链接,然后百度搜到 fuser 可以断开用户终端链接 命令作用 ...

  9. GO学习-(38) Go语言结构体转map[string]interface{}的若干方法

    结构体转map[string]interface{}的若干方法 本文介绍了Go语言中将结构体转成map[string]interface{}时你需要了解的"坑",也有你需要知道的若 ...

  10. 深度学习数据特征提取:ICCV2019论文解析

    深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...