最新的想法就是写一个显示脉搏的东西,主要就是通过串口读取硬件(检测心跳的)传来的数据,在显示一下。

先实现画心跳曲线

如下图

先来电干货,

首先,在这个代码中,第一次用到了list这个东东

所以,关于list这个东东就得说道说道

上参考连接:http://blog.csdn.net/lskyne/article/details/10418823

大神写的很好,这里贴出关于list的部分函数。

assign() 给list赋值 
back() 返回最后一个元素 
begin() 返回指向第一个元素的迭代器 
clear() 删除所有元素 
empty() 如果list是空的则返回true 
end() 返回末尾的迭代器 
erase() 删除一个元素 
front() 返回第一个元素 
get_allocator() 返回list的配置器 
insert() 插入一个元素到list中 
max_size() 返回list能容纳的最大元素数量 
merge() 合并两个list 
pop_back() 删除最后一个元素 
pop_front() 删除第一个元素 
push_back() 在list的末尾添加一个元素 
push_front() 在list的头部添加一个元素 
rbegin() 返回指向第一个元素的逆向迭代器 
remove() 从list删除元素 
remove_if() 按指定条件删除元素 
rend() 指向list末尾的逆向迭代器 
resize() 改变list的大小 
reverse() 把list的元素倒转 
size() 返回list中的元素个数 
sort() 给list排序 
splice() 合并两个list 
swap() 交换两个list 
unique() 删除list中重复的元素

剩下的demo就需要到大神贴子下面去看了

第一部分:数据来源

单起一个线程专门来获取数据,现在数据来源应该来之

1.串口

2.无线网络

3.蓝牙

大致需要实现以上三种模式的数据获取,目前没有,还没有搞到硬件,数据只能模拟。

  1. #include "get_date.h"
  2. #include <windows.h>
  3. #include <QDebug>
  4. #include <QTimer>
  5. #include <QSerialPort>
  6. QTimer timer;
  7. QSerialPort port;
  8. Get_date::Get_date()
  9. {
  10. qDebug()<<"Qthread is run";
  11.  
  12. }
  13.  
  14. void Get_date::run()
  15. {
  16. connect(&timer,SIGNAL(timeout()),this,SLOT(timerout()));
  17. timer.start(50);
  18. }
  19.  
  20. Get_date::~Get_date()
  21. {
  22. timer.stop();
  23. qDebug()<<"Qthread is exit";
  24. }
  25.  
  26. void Get_date::timerout()
  27. {
  28. emit send_date(rand()%300);
  29. }

这部分了,就是线程中模拟获取数据的部分,采到数据后通过信号槽发送给GUI进程。

  1. #include "palmus.h"
  2. #include "ui_palmus.h"
  3. #include <QPalette>
  4. #include <QDebug>
  5. #include <list>
  6. #include <windows.h>
  7. using namespace std;
  8. typedef list<int> LISTINT;
  9. static LISTINT listdate;
  10. static LISTINT::iterator i,j;
  11. Palmus::Palmus(QWidget *parent) :
  12. QWidget(parent),
  13. ui(new Ui::Palmus)
  14. {
  15. ui->setupUi(this);
  16. this->setWindowTitle("Palmus");
  17. QPalette palette;
  18. palette.setColor(QPalette::Background,QColor(0,0,0));
  19. this->setPalette(palette);
  20. connect(&Demodate,SIGNAL(send_date(int)),this,SLOT(slot_get_date(int)));
  21. Demodate.run();
  22.  
  23. }
  24.  
  25. Palmus::~Palmus()
  26. {
  27. Demodate.exit(1);
  28. delete ui;
  29. }
  30. void Palmus::slot_get_date(int temp)
  31. {
  32. listdate.push_front(temp);
  33. qDebug()<<listdate.size();
  34. update();
  35. if(listdate.size()>1000)
  36. {
  37. listdate.pop_back();
  38. }
  39. }
  40. static int temp1;
  41. static int temp2;
  42. void Palmus::paintEvent(QPaintEvent *)
  43. {
  44.  
  45. //Draw scale
  46. QPainter painter_scale(this);
  47. painter_scale.setPen(Qt::white);
  48. painter_scale.setRenderHints(QPainter::Antialiasing,true);
  49. int scale_x = this->width();
  50. int scale_y = this->height();
  51. painter_scale.drawLine(0,0,0,scale_y);
  52. painter_scale.drawLine(0,scale_y,scale_x,scale_y);
  53. while (scale_y>0)
  54. {
  55. painter_scale.drawLine(0,scale_y,5,scale_y);
  56. scale_y = scale_y-10;
  57. }
  58. scale_x = 0;
  59. scale_y = this->height();
  60. while (scale_x<(this->width()))
  61. {
  62. painter_scale.drawLine(scale_x,scale_y,scale_x,scale_y-5);
  63. scale_x= scale_x+10;
  64. }
  65.  
  66. //Draw palmus
  67. QPainter painter(this);
  68. painter.setRenderHints(QPainter::Antialiasing,true);
  69. painter.setPen(Qt::red);
  70. int x = this->width();
  71. i = listdate.begin();
  72. temp1 = *i;
  73. for(i=listdate.begin();i!=listdate.end();i=i.operator ++(1))
  74. {
  75. j=i.operator ++(1);
  76.  
  77. temp2 = *j;
  78. painter.drawLine(x,temp1,x-20,temp2);
  79. temp1 = temp2;
  80. x=x-20;
  81. }
  82. }

这部分就是GUI住进程的函数了,主要还是等于重载了paintevent()函数

函数中第一份是画刻度,现在还在想真么画好看

第二部分是画心跳曲线

  1. //Draw palmus
  2. QPainter painter(this);
  3. painter.setRenderHints(QPainter::Antialiasing,true);
  4. painter.setPen(Qt::red);
  5. int x = this->width();
  6. i = listdate.begin();
  7. temp1 = *i;
  8. for(i=listdate.begin();i!=listdate.end();i=i.operator ++(1))
  9. {
  10. j=i.operator ++(1);
  11.  
  12. temp2 = *j;
  13. painter.drawLine(x,temp1,x-20,temp2);
  14. temp1 = temp2;
  15. x=x-20;
  16. }

心跳曲线部分代码,其实主要就是画线,每一段线连起来,就是曲线了,剩下的代码在后面慢慢贴出来

Qt 实现脉搏检测-1-心跳曲线部分的更多相关文章

  1. Qt 实现脉搏检测-2,简陋的功能产品

    今天终于可以接上硬件来显示真是的脉搏情况了,上图 主要就是显示脉搏的心跳曲线,和IBI 数据来源是三个,串口,网口和蓝牙,目前只实现了串口,过程应该都是差不多的,监听,读取,解析,等硬件更新后,再次更 ...

  2. paip.c++ qt 图片处理 检测损坏的图片

    paip.c++ qt 图片处理 检测损坏的图片 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net ...

  3. QT 内存泄露 检测

      一:问题出现     最近几天在做一个QT程序,IPX的检测控制程序.需要全天候运行.自己做完了,然后就运行.使用  top|grep TP2  来动态检测程序的CPU,内存占用律.不幸的是,一晚 ...

  4. Qt应用中检测内存泄露——VLD

    本文简要描述一下在Qt应用中使用VLD来检测内存泄露.本次测试环境:QtCreator2.3 + Qt4.7.4-vs2008 + VS2008 Express. 1.下载并安装:VLD-2.2: h ...

  5. 【Qt编程】基于QWT的曲线绘制及图例显示操作

    在<QWT在QtCreator中的安装与使用>一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能. 首先,我们新建一个Qt应用程序,然后一路默认即可.这时,你会发现总共有: ...

  6. Qt: usb热插拔检测(windows);

    Qt提供了QAbstractNativeEventFilter来实现本地时间得过滤,通过对本地事件的检测,判断usb热插拔:(这里是windows 的例子); 首先,以QWidget, QAbstra ...

  7. 基于opencv和qt的人脸检测小系统

    摘要:利用opencv读取视频.图片并检测人脸,利用QT显示窗口,功能选择等 环境:Ubuntu18.04.OpenCV3.4.0.QT5.10.1 效果图: 代码如下(比较简单没什么注释): mai ...

  8. 【Qt编程】基于QWT的曲线绘制及图例显示操作——有样点的实现功能

    在<QWT在QtCreator中的安装与使用>一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能. 首先,我们新建一个Qt应用程序,然后一路默认即可.这时,你会发现总共有: ...

  9. QT - 内存泄漏检测

    一.安装vld-2.5.1-setup.exe 下载地址:https://archive.codeplex.com/?p=vld 二.pro中添加头文件目录与库目录 INCLUDEPATH += &q ...

随机推荐

  1. Hibernate的属性配置

    Hibernate配置属性 hibernate.dialect Hibernate方言(Dialect)的类名 - 可以让Hibernate使用某些特定的数据库平台的特性 取值. full.class ...

  2. 【洛谷P2168】[NOI2015]荷马史诗

    荷马史诗 建一个k叉哈夫曼树,用堆维护一下 // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #inc ...

  3. 【luogu P1774 最接近神的人_NOI导刊2010提高(02)】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1774 归并排序求逆序对. #include <cstdio> #define livelove ...

  4. 最短路径问题:弗洛伊德算法(Floyd)

    Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被 ...

  5. Openresty最佳案例 | 第6篇:OpenResty连接Mysql

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616698 本文出自方志朋的博客 centos 安装mysl Centos系统下安装my ...

  6. 优雅的QSignleton (一) Singleton单例实现

    接下来笔者来介绍如何用QSingleton实现一个简单的单例. 代码如下. Singleton.cs namespace QFramework.Example { using UnityEngine; ...

  7. python写爬虫的弯路

    一开始按照视频上的找了笔趣阁的网站先爬一部小说, 找了<遮天>,但是章节太多,爬起来太慢, 就换了一个几十章的小说. 根据视频里的去写了代码, 在正则表达式哪里出了很大的问题. from ...

  8. 微信订阅号 获取用户基本信息,登录及 php

    <?php //echo file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_cr ...

  9. springMVC-RESTful约束下dispatcher拦截对象优化

    警告: No mapping found for HTTP request with URI [/management/fonts/glyphicons-halflings-regular.woff] ...

  10. Graylog2日志服务安装配置

    软件版本: mongodb-org-3.2.10 jdk-1.8.0 (推荐rpm包,不然要修改Graylog启动脚本定义的JAVA命令路径) elasticsearch-2.4.1 (Graylog ...