前一篇笔记中实现了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. SpringBoot简明教程

    一.SpringBoot简介 1.什么是SpringBoot SpringBoot用来简化spring应用开发,约定大于配置,去繁从简,是J2EE一站式解决方案 2.SpringBoot的优点 快速创 ...

  2. 记一次golang内存泄露

    记一次golang内存泄露 最近在QA环境上验证功能时,发现机器特别卡,查看系统内存,发现可用(available)内存仅剩200多M,通过对进程耗用内存进行排序,发现有一个名为application ...

  3. mysql知识点归纳-锁(死锁)

    愿历尽千帆,归来仍是少年 所遇问题: MySql 更新死锁问题 Deadlock found when trying to get lock; try restarting transaction 场 ...

  4. ipmitool -I lanplus -H 10.1.81.90 -U admin -P admin mc reset cold

    ipmitool -I lanplus -H 10.1.81.90 -U admin -P admin mc reset cold

  5. 【转载】Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解

    Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解 1清风揽月10人评论5006人阅读2017-06-21 15:48:43   博文说明[前言]: 本文 ...

  6. linux中级之lvs配置(命令)

    一.nat模式配置 环境说明: DS:nat网卡(自动获取也可以,充当vip): 192.168.254.13 255.255.255.0 vmnet3网卡(仅主机): 172.16.100.1 25 ...

  7. linux命令--使用fsck修复文件系统

    使用fsck修复文件系统错误 1.问题描述 服务器maint_samba 由于服务器maint_samba (debian操作系统)没有正常关机,在重新启动过程中/dev/sdb1出现文件系统错误,需 ...

  8. 第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?

    第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的? linux 配置网络IP地址: 使用 net-tools: sudo ifconfig eth1 10.0.0.1/24 sudo ifc ...

  9. [leetcode] 46. 全排列(Java)

    46. 全排列 这题我们可以借用31. 下一个排列写的nextPermutation函数来做,稍微改造一下即可 注意要先给nums排个序 class Solution { // 当没有下一个排列时re ...

  10. Nginx 配置实例-配置高可用

    Nginx 配置实例-配置高可用 1. 实现效果 2. 两台机器 nginx 的安装 2.1 192.168.25.120 中 nginx 的安装 2.1.1 安装 pcre 依赖 2.1.2 安装其 ...