使用qt实现简易示波器功能

版权声明:微信 kobesdu https://blog.csdn.net/kobesdu/article/details/82052189
#include "drawer.h"

#include <QPalette>
#include <QPainter>
#include <QtGui>
#include<QColor>
#include<iostream>

Drawer::Drawer(QWidget *parent) :
    QWidget(parent)
{
    myTimerId=0;
    xpos=0;
    pixel=-1;   //负数证明向左移动
    displayDatacharge=0;
    displayDatalypos=0;

}
void Drawer::openDraw()
{
  Close=false;
  myTimerId=startTimer(5);//第一个时钟,返回1

}
void Drawer::closeDraw()
{
    Close=true;
    killTimer(myTimerId);
    update();

}
void Drawer::drawGrid(QPainter &painter)//绘制网格
{
    painter.setPen(Qt::green);
    //定时绘制竖直方向的直线
    //if(this->xpos==0||xpos%2==0)
    //    painter.drawLine(this->width()-0.5,-this->height(),this->width()-0.5,0);
    xpos++;

//    //不再绘制竖直和水平的线  而只是绘制y = 0
//     painter.drawLine(0,-150,this->width(),-150);
    //绘制水平方向的直线
    for(int u=0;u<this->height();u++)
    {
        if(u%50==0)
        {
        painter.drawLine(0,-u,this->width(),-u);
        }
    }

    //绘制竖直方向的直线
    for(int t=0;t<this->width();t++)
    {
        if(t%50==0)
        {
        painter.drawLine(t,0,t,-this->height());
        }
    }

}
void Drawer::drawCurves(QPainter &painter)//绘制实时曲线
{
    painter.setPen(Qt::black);
    displayDatafypos=displayDatacharge;
    displayDatacharge=displayDatalypos;
    painter.drawLine(this->width()+this->pixel,-displayDatafypos,this->width(),-displayDatalypos);
}
void Drawer::paintEvent(QPaintEvent *)
{
    QPainter paint(this);
    paint.setBrush(Qt::white);//设置绘制背景的笔的颜色
    paint.setViewport(0,0,this->width(),this->height());//设置视口,物理坐标
    paint.setWindow(QRect(0,-this->height(),this->width(),this->height()));//设置窗口,逻辑坐标
    paint.drawRect(0,-this->height(),this->width(),this->height());//绘制背景
    if(Close!=true)
    {
        drawGrid(paint);
        drawCurves(paint);
    }
}
void Drawer::timerEvent(QTimerEvent *event) //当时钟周期定义是启动
{    int  testpos ;
    if(event->timerId()==myTimerId){
        scroll(this->pixel,0);
        testpos = *pPosition;
        testpos = testpos/8388608/2;
        testpos = testpos +150;
        displayDatalypos=testpos; //数据的入口;
  //      displayDatalypos=rand()%150; //数据的入口;

    }
    else{
    QWidget::timerEvent(event);}
}

猜你喜欢

转载自blog.csdn.net/kobesdu/article/details/82052189
今日推荐