• QT心电图设计


    不需要别的UI设置,直接放在QT文件中即可

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QTimer>//定时器头文件
    #include <QVector>//容器头文件
    #include <QPainter>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        //explicit显式构造,避免隐式构造
        explicit MainWindow(QWidget *parent = nullptr); //构造函数
        ~MainWindow();//析构函数
    
    private:
        Ui::MainWindow *ui;
        QTimer *timer;//定时器
        QVector<QPoint> point_arry;//保存所有的坐标容器
        //界面刷新的时候,会自动调用函数
        void paintEvent(QPaintEvent *event);
        //定时器处理函数
    public slots:
        //定义槽函数
        void timer_timeout(void);
    
    };
    
    #endif // MAINWINDOW_H
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        //初始化变量
        qsrand(3);
        timer = new QTimer(this);
        //timer的超时时间与处理函数链接起来,时间来刷新槽函数
        connect(timer,SIGNAL(timeout()),this,SLOT(timer_timeout()));
        //启动定时器
        timer->start(100);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::paintEvent(QPaintEvent *event)
    {
        //todo 界面刷新时,执行 将点连成线RER
        //准备画笔
        QPainter painter(this);
        QPen pen;
        pen.setWidth(2);//设置画刷的像素宽度
        pen.setBrush(QBrush(Qt::green));//设置画刷的颜色
        painter.setPen(pen);
        painter.setRenderHint(QPainter::Antialiasing);//画刷抗锯齿
        int i;
        for(i=1;i<point_arry.size();i++){
            QPoint p1=point_arry[i-1]; //p1 等于point_arry上一点
            QPoint p2=point_arry[i];   //p2 等于point_arry目前的点
            painter.drawLine(p1,p2);//将p1与p2链接起来
        }
    
    }
    //槽函数的实现
    void MainWindow::timer_timeout()
    {
        //todo 定时器到时执行的任务 移动Y轴
        static int x = 0;//static 下次不在从零开始
        int y;
        if(x<this->width()){//如果x现在在主窗口的宽度内
            y = this->height()/2+rand()%200-100;//y轴移动的取值,将y值放在height中间
            point_arry.push_back(QPoint(x,y));//point_arry的类型就是QPoint类型的
            x+=5;//每次移动的x轴长度
        }
        else{//如果x轴的长度超出窗口的长度
            int i;
            for(i=1;i<point_arry.size();i++){
                point_arry[i-1].setY(point_arry[i].y());//将arry中y的值与上一个y值交换
            }
            point_arry[point_arry.size()-1].setY(this->height()/2+rand()%200-100);//设置目前的y值
        }
        this->update();
    }
  • 相关阅读:
    关于在Linux下的换行符 和windows下的换行符
    Linux文件操作标准接口
    tcpdump抓包和wireshark解包
    Makefile学习(1)
    域名服务器设置
    Linux系统移植(1)
    SQL基本语句整理
    ARM---搭建开发板的开发环境(x210v3s)
    C语言基础
    Oracle中的USEREVN()
  • 原文地址:https://www.cnblogs.com/sailifsh-lyh/p/10645940.html
Copyright © 2020-2023  润新知