一、效果展示

二、源代码分享

#include "widget.h"
#include "ui_widget.h"
#include <QDateTime>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),time(0),showIsPause(false)
{ui->setupUi(this);yMaxVal=1;yMinVal=-1;for(int i=angleSetWD;i<wdMax;i++){ui->waveWidget->addGraph();}ui->waveWidget->graph(Widget::angleSetWD)->setPen(QPen(QColor(0,170,0)));ui->waveWidget->graph(Widget::angleOutputWD)->setPen(QPen(QColor(170,170,255)));ui->waveWidget->graph(Widget::pitchWD)->setPen(QPen(QColor(200,174,180)));ui->waveWidget->graph(Widget::speedSetWD)->setPen(QPen(QColor(170,170,0)));ui->waveWidget->graph(Widget::speedOutputWD)->setPen(QPen(QColor(0,255,255)));ui->waveWidget->graph(Widget::rollWD)->setPen(QPen(QColor(163,200,156)));ui->waveWidget->graph(Widget::turnSetWD)->setPen(QPen(QColor(170,255,0)));ui->waveWidget->graph(Widget::turnOutputWD)->setPen(QPen(QColor(255,85,0)));ui->waveWidget->graph(Widget::yawWD)->setPen(QPen(QColor(200,200,80)));ui->waveWidget->graph(Widget::accXWD)->setPen(QPen(QColor(0,170,127)));ui->waveWidget->graph(Widget::accYWD)->setPen(QPen(QColor(255,0,127)));ui->waveWidget->graph(Widget::accZWD)->setPen(QPen(QColor(200,87,87)));ui->waveWidget->graph(Widget::gyroXWD)->setPen(QPen(QColor(0,255,127)));ui->waveWidget->graph(Widget::gyroYWD)->setPen(QPen(QColor(255,255,127)));ui->waveWidget->graph(Widget::gyroZWD)->setPen(QPen(QColor(97,200,69)));ui->waveWidget->graph(Widget::magXWD)->setPen(QPen(QColor(170,85,255)));ui->waveWidget->graph(Widget::magYWD)->setPen(QPen(QColor(255,85,255)));ui->waveWidget->graph(Widget::magZWD)->setPen(QPen(QColor(41,192,200)));ui->waveWidget->graph(Widget::batteryWD)->setPen(QPen(QColor(0,170,255)));ui->waveWidget->graph(Widget::leftMototCurrWD)->setPen(QPen(QColor(0,85,255)));ui->waveWidget->graph(Widget::rightMototCurrWD)->setPen(QPen(QColor(200,88,127)));ui->waveWidget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);   //可拖拽+可滚轮缩放ui->waveWidget->yAxis->setRange(yMinVal, yMaxVal);                 //当前Y轴显示的范围ui->waveWidget->xAxis->setRange(0, 1000);                 //当前Y轴显示的范围ui->waveWidget->legend->setVisible(false);         // 显示图例timerBase.start(10);connect(&timerBase,&QTimer::timeout,this,[=]{static int a=0;wave_add_data(angleSetWD, (double)a);wave_add_data(angleOutputWD, (double)a+200);wave_add_data(pitchWD, (double)a+400);a+=1;if(a>=100)a=0;});for(int i=angleSetWD;i<wdMax;i++){for(int j=0;j<VAL_MAX;j++){xAxisVal[i][j]=0;yAxisVal[i][j]=0;}checkBoxVal[i]=false;}connect(ui->checkBoxAngleSet,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxAngleOutput,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxPitch,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxSpeedSet,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxSpeedOutput,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxRoll,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxTurnSet,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxTurnOutput,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxYaw,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxAccX,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxAccY,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxAccZ,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxGyroX,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxGyroY,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxGyroZ,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxMagX,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxMagY,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxMagZ,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxBattery,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxLeftMotorCurr,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);connect(ui->checkBoxRightMotorCurr,&QCheckBox::stateChanged,this,&Widget::checkbox_state_change);
}Widget::~Widget()
{delete ui;
}void Widget::wave_add_data(WaveData wave, double key, double dat)
{}
void Widget::wave_add_data(WaveData wave, double dat)
{bool adjustRange=false;for(int i=angleSetWD;i<wdMax;i++){if(checkBoxVal[i]){time++;adjustRange=true;break;}}for(int i=0;i<VAL_MAX-1;i++){xAxisVal[wave][i]=xAxisVal[wave][i+1];yAxisVal[wave][i]=yAxisVal[wave][i+1];}xAxisVal[wave][VAL_MAX-1]=time;yAxisVal[wave][VAL_MAX-1]=dat;QVector<double> key(VAL_MAX),value(VAL_MAX);yMaxVal=0;yMinVal=0;for(int i=angleSetWD;i<wdMax;i++){for(int j=0;j<VAL_MAX;j++){if(checkBoxVal[i]){if(yAxisVal[i][j]>yMaxVal)yMaxVal=yAxisVal[i][j];if(yAxisVal[i][j]<yMinVal)yMinVal=yAxisVal[i][j];}}}#define X_AXIS_RANGE_MAX  (VAL_MAX/3*2)if(adjustRange&&showIsPause==false){ui->waveWidget->yAxis->setRange(yMinVal-10, yMaxVal+10);                 //当前Y轴显示的范围if(time>X_AXIS_RANGE_MAX)ui->waveWidget->xAxis->setRange(time-X_AXIS_RANGE_MAX, time+10);                 //当前Y轴显示的范围elseui->waveWidget->xAxis->setRange(0, time+10);                 //当前Y轴显示的范围}for(int i=0;i<VAL_MAX;i++){key[i]=xAxisVal[wave][i];value[i]=yAxisVal[wave][i];}if(showIsPause==false){if(checkBoxVal[wave])ui->waveWidget->graph(wave)->setData(key,value);ui->waveWidget->replot();}
}void Widget::checkbox_state_change(int val)
{QCheckBox* cb = qobject_cast<QCheckBox*>(sender());if(cb==ui->checkBoxAngleSet)checkBoxVal[angleSetWD]=val?true:false;else if(cb==ui->checkBoxAngleOutput)checkBoxVal[angleOutputWD]=val?true:false;else if(cb==ui->checkBoxPitch)checkBoxVal[pitchWD]=val?true:false;else if(cb==ui->checkBoxSpeedSet)checkBoxVal[speedSetWD]=val?true:false;else if(cb==ui->checkBoxSpeedOutput)checkBoxVal[speedOutputWD]=val?true:false;else if(cb==ui->checkBoxRoll)checkBoxVal[rollWD]=val?true:false;else if(cb==ui->checkBoxTurnSet)checkBoxVal[turnSetWD]=val?true:false;else if(cb==ui->checkBoxTurnOutput)checkBoxVal[turnOutputWD]=val?true:false;else if(cb==ui->checkBoxYaw)checkBoxVal[yawWD]=val?true:false;else if(cb==ui->checkBoxAccX)checkBoxVal[accXWD]=val?true:false;else if(cb==ui->checkBoxAccY)checkBoxVal[accYWD]=val?true:false;else if(cb==ui->checkBoxAccZ)checkBoxVal[accZWD]=val?true:false;else if(cb==ui->checkBoxGyroX)checkBoxVal[gyroXWD]=val?true:false;else if(cb==ui->checkBoxGyroY)checkBoxVal[gyroYWD]=val?true:false;else if(cb==ui->checkBoxGyroZ)checkBoxVal[gyroZWD]=val?true:false;else if(cb==ui->checkBoxMagX)checkBoxVal[magXWD]=val?true:false;else if(cb==ui->checkBoxMagY)checkBoxVal[magYWD]=val?true:false;else if(cb==ui->checkBoxMagZ)checkBoxVal[magZWD]=val?true:false;else if(cb==ui->checkBoxBattery)checkBoxVal[batteryWD]=val?true:false;else if(cb==ui->checkBoxLeftMotorCurr)checkBoxVal[leftMototCurrWD]=val?true:false;else if(cb==ui->checkBoxRightMotorCurr)checkBoxVal[rightMototCurrWD]=val?true:false;
}void Widget::on_btnPause_clicked()
{showIsPause=!showIsPause;if(showIsPause) //已经暂停ui->btnPause->setText("运行");elseui->btnPause->setText("暂停");
}void Widget::on_btnClear_clicked()
{QVector<double> key(VAL_MAX),value(VAL_MAX);for(int i=angleSetWD;i<wdMax;i++){for(int j=0;j<VAL_MAX;j++){xAxisVal[i][j]=0;yAxisVal[i][j]=0;key[j]=0;value[j]=0;}ui->waveWidget->graph(i)->addData(key,value);}ui->waveWidget->replot();}

三、位置工程链接
后续添加

QT开发的虚拟示波器代码分享相关推荐

  1. QT开发--Visual Studio2013--配置代码32bit、64bit环境

    QT.VS2013等环境安装 QT.VS2013安装 关于开发环境的安装不是本文的重点,本文重点在于如何在不同的环境下配置代码引用.如:在开发OpenCV的过程中需要用到QT的库和代码,但是inclu ...

  2. Egret开发HTML5小游戏代码分享

    本游戏为<Egret HTML5游戏开发指南>中的案例.作者将代码在这里做一下分享.案例中有两个主要的代码文件,一个Main.ts,一个Circle.ts.在Circle.ts中使用了eg ...

  3. QT开发的视频监管平台分享

    用QT陆续写过几个商业项目以及公司内部硬件通信需要的一些辅助设置工具,其中以报警视频联动管理平台为主,从2010年的C#版本开始编写,陆续完善积累到2014年的稳定版,花了相当多的精力去完善,不断查看 ...

  4. java微信开发图文_JAVA微信开发总结的图文代码分享

    最近研究了一下微信,感觉不是很难,借鉴了marker(www.yl-blog.com)的开源代码,修改了几处小BUG(在作者的开源网站上留了言,详见其开源网站),很快就实现关键的逻辑: 1.开发者验证 ...

  5. php代码实现微信代扣,PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布.必须到你通过程序测试提交订单.发货通知等数据到微信的系统中,才能申请发布. 然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支 ...

  6. Qt开发Android范例详入门详解

    一个人的成功是岁月的积累和众人乐善好施的结果,我们尊敬那些无私奉献的人,更尊重那些持之以恒的大无畏开拓者.老子狗屁不是,但是为了更多人的成功,无论如何要把成果分享出来,感谢糊涂李哥以及那些帮助我的人 ...

  7. 1. 用Qt开发的十大理由

    用Qt的十大理由 原因最主要的是很多大公司都在用,有钱景. 先来看看各大公司的评价: 奔驰:们用 Qt 开发了绝大部分的UI体验和软件,包括屏幕动画,屏幕间的过渡和小组件. FORMLABS:凭借Qt ...

  8. 分享下个人一直以来整理维护的C++/Qt开发用到的控件库

    今天分享下个人一直以来在维护的一个C++/Qt开发库,感兴趣的可以关注并下载下看看,应该会用的到,这个库会不定期的进行更新. 工程结构 详细的说明可以到工程文件下查看readme文件. 部分效果展示 ...

  9. ios nstimer实现延时_IOS_IOS开发代码分享之用nstimer实现倒计时功能,用nstimer实现倒计时功能,废话 - phpStudy...

    IOS开发代码分享之用nstimer实现倒计时功能 用nstimer实现倒计时功能,废话不多说,直接上代码,详细解释请参照注释 // [NSTimer scheduledTimerWithTimeIn ...

  10. 计算机音乐数字乐谱梦中的婚礼,乐谱梦中的婚礼代码是什么-天谕手游梦中的婚礼歌曲最新乐谱代码分享 - QT软件园...

    乐谱梦中的婚礼代码是什么?天谕游戏中梦中的婚礼这首歌是非常魔性的,冒险家可以将梦中的婚礼的歌曲代码复制进游戏中,创建属于自己的歌曲,这样就能在游戏中弹奏了,QT小编今天为大家带来天谕手游梦中的婚礼歌曲 ...

最新文章

  1. 自动驾驶与汽车安全电子技术
  2. python成绩管理系统界面-python实现简易版学生成绩管理系统
  3. Java的知识点26——File_API
  4. ppt流程图字体太小_简单三步,用WPS轻松完成一个又大气又好看的流程图!
  5. sendfile实现文件服务器,sendfile
  6. 部署LNMP架构及其应用
  7. Codeforces 369E Valera and Queries --树状数组+离线操作
  8. c 语言转换成java语言,求助大神!!!JAVA转换成C语言
  9. iterator [ɪtə'reɪtə] 遍历器
  10. Centos 配置eth0 提示Device does not seem to be present -- 转载
  11. Memcached内存分配机制
  12. 伍德里奇计量经济学计算机课后答案第一章,伍德里奇---计量经济学第7章部分计算机习题详解(STATA)...
  13. 初二计算机辅导记录,计算机一级OFFICE辅导:用Excel制作自动记录的考勤表
  14. smb协议讲解_SMB协议详解 - 人之为学,如饮河海,大饮则大盈,小饮则小盈 - OSCHINA - 中文开源技术交流社区...
  15. underscore.js 964 --- 1103行
  16. Win10添加Loopback网卡
  17. 七号信令系统在GSM中的应用
  18. python百度地图标注自己的店名_百度地图上怎么显示店名 百度地图标注店名方法...
  19. SQL——PostgreSQL Driver
  20. ASE0510SH-ASEMI的MOS管ASE0510SH

热门文章

  1. entity framework 新手入门篇(3)-entity framework实现orderby,count,groupby,like,in,分页等...
  2. 七七计算机论文,七七计算机外文文献 七七计算机参考文献怎么写
  3. 从零开始学凸优化理论与KKT条件
  4. 宇枫资本上班族理财的方法
  5. 公式推导 圆面积公式 圆周长公式
  6. Create React App无eject配置(react-app-rewired 和 customize-cra)
  7. 含泪整理最优质立秋海报设计素材,你想要的这里都有
  8. 用html写游戏,Html5写一个简单的俄罗斯方块小游戏
  9. qq接收不了文件显示服务器拒绝,QQ提示服务器拒绝了您发送离线文件怎么办
  10. 一个计算机专业女孩的求学之路——七年之痒,痒之感悟