Qt 实现脉搏检测-1-心跳曲线部分

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

先实现画心跳曲线

如下图

image.png

先来电干货,


首先,在这个代码中,第一次用到了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.蓝牙


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


#include "get_date.h"  
#include <windows.h>  
#include <QDebug>  
#include <QTimer>  
#include <QSerialPort>  
QTimer timer;  
QSerialPort port;  
Get_date::Get_date()  
{  
    qDebug()<<"Qthread is run";  
}  
void Get_date::run()  
{  
    connect(&timer,SIGNAL(timeout()),this,SLOT(timerout()));  
    timer.start(50);  
}  
Get_date::~Get_date()  
{  
    timer.stop();  
    qDebug()<<"Qthread is exit";  
}  
void Get_date::timerout()  
{  
    emit send_date(rand()%300);  
}  

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

 

#include "palmus.h"  
#include "ui_palmus.h"  
#include <QPalette>  
#include <QDebug>  
#include <list>  
#include <windows.h>  
using namespace std;  
typedef list<int> LISTINT;  
static LISTINT listdate;  
static LISTINT::iterator i,j;  
Palmus::Palmus(QWidget *parent) :  
    QWidget(parent),  
    ui(new Ui::Palmus)  
{  
    ui->setupUi(this);  
    this->setWindowTitle("Palmus");  
    QPalette palette;  
    palette.setColor(QPalette::Background,QColor(0,0,0));  
    this->setPalette(palette);  
    connect(&Demodate,SIGNAL(send_date(int)),this,SLOT(slot_get_date(int)));  
    Demodate.run();  
}  
Palmus::~Palmus()  
{  
    Demodate.exit(1);  
    delete ui;  
}  
void Palmus::slot_get_date(int temp)  
{  
    listdate.push_front(temp);  
    qDebug()<<listdate.size();  
    update();  
    if(listdate.size()>1000)  
    {  
        listdate.pop_back();  
    }  
}  
static int temp1;  
static int temp2;  
void Palmus::paintEvent(QPaintEvent *)  
{  
    //Draw scale  
    QPainter painter_scale(this);  
    painter_scale.setPen(Qt::white);  
    painter_scale.setRenderHints(QPainter::Antialiasing,true);  
    int scale_x = this->width();  
    int scale_y = this->height();  
    painter_scale.drawLine(0,0,0,scale_y);  
    painter_scale.drawLine(0,scale_y,scale_x,scale_y);  
    while (scale_y>0)  
    {  
       painter_scale.drawLine(0,scale_y,5,scale_y);  
       scale_y = scale_y-10;  
    }  
    scale_x = 0;  
    scale_y = this->height();  
    while (scale_x<(this->width()))  
    {  
        painter_scale.drawLine(scale_x,scale_y,scale_x,scale_y-5);  
        scale_x= scale_x+10;  
    }  
    //Draw palmus  
    QPainter painter(this);  
    painter.setRenderHints(QPainter::Antialiasing,true);  
    painter.setPen(Qt::red);  
    int x = this->width();  
    i = listdate.begin();  
    temp1 = *i;  
    for(i=listdate.begin();i!=listdate.end();i=i.operator ++(1))  
    {  
        j=i.operator ++(1);  
        temp2 =  *j;  
        painter.drawLine(x,temp1,x-20,temp2);  
        temp1 = temp2;  
        x=x-20;  
    }  
}  


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

 

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


第二部分是画心跳曲线


//Draw palmus  
    QPainter painter(this);  
    painter.setRenderHints(QPainter::Antialiasing,true);  
    painter.setPen(Qt::red);  
    int x = this->width();  
    i = listdate.begin();  
    temp1 = *i;  
    for(i=listdate.begin();i!=listdate.end();i=i.operator ++(1))  
    {  
        j=i.operator ++(1);  
        temp2 =  *j;  
        painter.drawLine(x,temp1,x-20,temp2);  
        temp1 = temp2;  
        x=x-20;  
    }  

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

目录
相关文章
|
6月前
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
115 0
|
2月前
|
C语言 Android开发 C++
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
本文介绍了使用MTuner软件进行Qt MinGW编译程序的内存泄漏检测的方法,提供了MTuner的下载链接和测试代码示例,并通过将Debug程序拖入MTuner来定位内存泄漏问题。
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
|
4月前
|
数据可视化 开发者 C++
Qt(C++)使用QChart静态显示3个设备的温度变化曲线
QChart模块是Qt Charts库的基础,提供了用于创建和显示各种类型图表的类和接口。Qt Charts库是一个功能丰富、易于使用的数据可视化工具库,可以帮助开发者在应用程序中添加漂亮而又交互性强的图表。
70 1
Qt(C++)使用QChart静态显示3个设备的温度变化曲线
|
4月前
|
存储 JSON 数据可视化
Qt(C++)使用QChart动态显示3个设备的温度变化曲线
Qt的QChart是一个用于绘制图表和可视化数据的类。提供了一个灵活的、可扩展的、跨平台的图表绘制解决方案,可以用于各种应用程序,如数据分析、科学计算、金融交易等。
283 1
|
5月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
89 0
|
6月前
|
编译器 C++ Windows
QT5构建套件检测不到MSVC2017解决方法
QT5构建套件检测不到MSVC2017解决方法
538 0
|
11月前
qt-绘制曲线(qcustomplot)
qt-绘制曲线(qcustomplot)
433 0
QT圆形进度条(QT桌面项目光照强度检测)
QT圆形进度条(QT桌面项目光照强度检测)
108 0
|
算法
Qt实现一个重复文件检测小工具(原理:通过md5校验)
Qt实现一个重复文件检测小工具(原理:通过md5校验)
298 0
|
存储 算法
Qt开发技术:QCharts(三)QCharts样条曲线图介绍、Demo以及代码详解
Qt开发技术:QCharts(三)QCharts样条曲线图介绍、Demo以及代码详解
Qt开发技术:QCharts(三)QCharts样条曲线图介绍、Demo以及代码详解

推荐镜像

更多