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

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

//绘制示波器的实时曲线是通过QPainter的drawLine实现的。 QPainter的类进行低层次的画在控件和其他绘图设备。QPainter提供高度优化的功能来完成大多数绘图 GUI 程序所需的工作。它可以绘制从简单线条到复杂形状(如馅饼和和弦)的所有内容。它还可以绘制对齐的文本和像素图。通常,它在“自然”坐标系中绘制,但它也可以进行视图和世界变换。QPainter可以对任何继承QPaintDevice类的对象进行操作。QPainter的常见用途是在小部件的绘制事件中:构造和自定义(例如设置笔或画笔)画家。然后画。记得在绘制后销毁QPainter对象

资料见网址

doc.qt.io/qt-5/qxmlst…

以下是源码

#include "drawer.h"

#include  #include  #include  #include #include

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;uheight();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);}
复制代码

}



相关文章
|
6月前
|
开发框架 Java 编译器
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
211 1
|
Linux API Windows
linux系统中利用QT实现蓝牙功能的方法
linux系统中利用QT实现蓝牙功能的方法
547 0
|
Linux
linux系统中利用QT实现音乐播放器的功能
linux系统中利用QT实现音乐播放器的功能
230 0
|
4月前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
142 4
|
Ubuntu Linux API
linux系统中使用QT实现摄像头功能的方法
linux系统中使用QT实现摄像头功能的方法
242 0
|
存储 Linux
linux系统中使用QT实现多媒体的功能方法
linux系统中使用QT实现多媒体的功能方法
175 0
|
Windows 存储 Cloud Native
C++Qt windows系统托盘增加图标和功能
C++Qt windows系统托盘增加图标和功能
|
数据可视化 C++
【变化检测】多时相遥感影像变化检测 Qt界面可视化 / 实现卷帘功能(附有完整代码)
【变化检测】多时相遥感影像变化检测 Qt界面可视化 / 实现卷帘功能(附有完整代码)