基于Qt的信号分析简单应用软件的设计
一、需求描述:
1、读取data.asc文件,分析其连续性;
2、绘制信号图像,并保存。
二、UI界面组成:
该应用的UI由以下几个控件组成:
3个PushButton:打开文件、图像保存、退出;
1个Combox:下拉框用于信号的选择;
1个Widget:用于确定绘图区域的坐标,并在Widget部件上绘制图像曲线。
3个Label:用于标注注释,及坐标轴

三、主要功能的实现
信号分析结果如下:

其中最主要的涉及信号数据的标准化处理,标准化处理计算公式:
std=(当前信号值—此类信号的最小值)/(此类信号的最大值—此类信号的最小值)
1、坐标轴的绘制
void Dialog::paintEvent(QPaintEvent *event)//重绘事件处理函数的定义 实现绘制坐标轴函数
{
QPainter painter(this);//创建一个QPainter对象,this为绘图设备 QPoint wpostion = ui->widget->pos(); //当前窗体Widget的原点的位置,weight的左上角处(0,0)点
QSize wsize = ui->widget->size(); //Ui窗体当前的大小(宽 高) //设置坐标轴点的坐标
int x1=wpostion.x()-; //0-1
int y1= wpostion.y()+ wsize.height()+ ; //0+高+1 //创建画笔P212 设画笔使用颜色 线宽 画笔风格 画笔端点风格 画笔连接风格
QPen pen(Qt::blue,,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin);
//使用画笔
painter.setPen(pen); //绘制坐标轴
painter.drawLine(x1,y1,this->width()-,y1);//绘制横轴 时间轴
painter.drawLine(x1,wpostion.y(),x1,y1);//绘制纵轴 信号值轴
}
2、文件打开功能实现
void Dialog::on_filepushButton_clicked() //打开文件按钮函数的定义 实现文本文件的读取
{ QString fileName = QFileDialog::getOpenFileName(this, tr("文件打开对话框"),"D",
tr("文本文件(*.txt);;ASC文件(*.asc)"));
//使用QFileDialog类中的getOpenFileName()函数获取选择的文件名 返回选择的文件的文件名
//参数定义 指定父窗口 设置对话框标题 指定打开目录路径 文件类型过滤器
QFile file(fileName);//创建一个QFile类对象, //然后以只读的方式打开
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return;
} int rownum=;//第一行行号为0
for(int i=;i<;i++)//16列初始化
data[i].clear(); QTextStream in(&file);//一行一行的读取一个文本文件
while(!in.atEnd())
{
QString fileLine=in.readLine(); //读取到每一行的字符串 //p327 对分行读取的字符串进行处理
QStringList sl=fileLine.split(" ",QString::SkipEmptyParts);//字符串分割 将分割后的字符串放入组表中
rownum++;//行号加1 int i=; //第i列 //将每一行的各个元素 分别放入每一列对应下的数组内
for(QStringList::const_iterator it=sl.constBegin();it!=sl.end();it++,i++) //it每行字符组的个数
{
data[i].push_back((*it).toFloat()); //将字符串转换成浮点数据写入数据容器内
}
}
ui->comboBox->setCurrentIndex(); //下拉框当前值值第一列
}
3、图像保存功能
void Dialog::on_pushButton_2_clicked()//实现图像保存
{
QPixmap pixmap;//定义一个pixmap图像
pixmap=pixmap.grabWindow(QApplication::desktop()->winId(),pos().x(),pos().y(),frameGeometry().width(),frameGeometry().height());
//grabWindow可以实现将屏幕上的窗体保存成一个QPixmap格式的图片
pixmap.save("D:\\picture.jpg","JPG");//将截取的窗体图像保存到E盘并以JPG格式保存
}
4、退出按钮的实现
void Dialog::on_pushButton_clicked()//退出当前窗口
{
this->close();
}
5、曲线绘制事件
void Widget2::paintEvent(QPaintEvent *event)//重绘事件处理函数的定义 在widget部件上绘制曲线
{ //信号值y值 接收
if(m_data==NULL) return;
QVector<float>& data = *m_data; int r=;//初始化行坐标为0
const int rnum=data.size();//每一列信号的值的个数 即行号
if(rnum==) return; //如果当前没有信号值 返回 //信号值找最大值最小值的过程
float min,max;
min=max=data[];
for(int i=;i<rnum;i++)
{
if(data[i]>max) max=data[i];
if(data[i]<min) min=data[i];
} //数据标准化过程 x=(x-min)/(max-min)*height
const float wheight=this->height();
/*while(max!=min)
{
for(int j=0;j<rnum;j++)
{
data[j]=(data[j]-min)*wheight/(max-min);
}
}
for(int j=0;j<rnum;j++)
{
if(max=min)
{
data[j]=wheight/2;
}
else
{
data[j]=(data[j]-min)*wheight/(max-min);
}
}*/ //设置路径path的过程 P230
QPainterPath path;//定义一个path对象
//曲线当前点
path.moveTo(r,max!=min?((data[r]-min)/(max-min))*wheight:wheight/);
//曲线目标点 即下一个点 下一个点自动变成当前点
for(r=;r<rnum;r++)
{
path.lineTo(r,max!=min?((data[r]-min)/(max-min))*wheight:wheight/);
} //绘制曲线的过程
//指定绘图设备
QPainter painter(this);
//创建画笔P212 设画笔使用颜色 线宽 画笔风格 画笔端点风格 画笔连接风格
QPen pen(Qt::red,,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin);
//使用画笔
painter.setPen(pen);
//将坐标系统进行平移 平移到起始点位置
painter.translate(, this->height());
//将坐标系统进行缩放
painter.scale(,-);
//绘制当前路径
painter.drawPath(path); }
基于Qt的信号分析简单应用软件的设计的更多相关文章
- 【Qt编程】基于Qt的词典开发系列<十一>系统托盘的显示
本文主要讨论Qt中的系统托盘的设置.系统托盘想必大家都不陌生,最常用的就是QQ.系统托盘以简单.小巧的形式能让人们较快的打开软件.废话不多说,下面开始具体介绍. 首先,新建一个Qt Gui项目,类型选 ...
- 【Qt编程】基于Qt的词典开发系列<八>--用户登录及API调用的实现
在上一篇文章<调用网络API>中,我仅仅讲述了怎样直观的使用API接口以及调用API后返回的结果,本文则从程序实现的角度来实现API的调用.当然本程序的实现也是借助于扇贝网的API接口文档 ...
- 【Qt编程】基于Qt的词典开发系列<六>--界面美化设计
本文讲一讲界面设计,作品要面向用户,界面设计的好坏直接影响到用户的体验.现在的窗口设计基本都是扁平化的,你可以从window XP与window 8的窗口可以明显感觉出来.当然除了窗口本身的效果,窗口 ...
- 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计
这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...
- 【Qt编程】基于Qt的词典开发系列<二>--本地词典的设计
我设计的词典不仅可以实现在线查单词,而且一个重大特色就是具有丰富的本地词典库:我默认加入了八个类型的词典,如下所示: 由于是本人是通信专业,因此加入了华为通信词典.电子工程词典,又由于我喜爱编程,也加 ...
- 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动
在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口 ...
- 【Qt编程】基于Qt的词典开发系列<四>--无边框窗口的缩放与拖动
在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词 ...
- 【Qt编程】基于Qt的词典开发系列--后序
从去年八月份到现在,总算完成了词典的编写以及相关技术文档的编辑工作.从整个过程来说,文档的编写比程序的实现耗费的时间更多.基于Qt的词典开发系列文章,大致包含了在编写词典软件过程中遇到的技术重点与难点 ...
- 【Qt编程】基于Qt的词典开发系列<一>--词典框架设计及成品展示
去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...
随机推荐
- Linux查看系统负载常用命令
1.查看负载 uptime :: up day, :, user, load average: 0.00, 0.00, 0.00 在过去1分钟.5分钟.15分钟内平均进程数量 2.查看用户 w :: ...
- Sae配置Java数据库连接
Sae配置Java数据库连接 Sae在Java中配置mysql数据库 >>>>>>>>>>>>>>>>& ...
- SQL中存储过程的例子
导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...
- PHP-popen() 函数打开进程文件指针
待更新 版权声明:本文为博主原创文章,未经博主允许不得转载.
- html a标签 图片边框和点击后虚线框的有关问题
html a标签 图片边框和点击后虚线框的问题 一直在在chrome上开发自己的项目,今天上ie和firefix一看,真丑,a标签在使用图片时,多加了蓝色的边框,并且点击后所有a标签都会出现一个虚线框 ...
- (转)Spring MVC
资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com 目录 一.前 ...
- WebStrom安装了angularjs插件,但是没有语法提示
你必须要将angular.js文件放在当前工程下才能激活代码提示功能.
- 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则
转载:http://space.itpub.net/17007506/viewspace-616852 腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室( ...
- C#一些小技巧(二)
教你们怎么改配色方案,因为本人智障了很久,每次想改颜色的时候都会看到一大圈的选项,难以琢磨,但是智障了那么久终于被我找到了所有的关联. 首先,要告诉你们的是,其实C#里面要改的东西只有那么几个,但是注 ...
- 【html】【2】html引入外部文件js css
1>引入js 我们只是写了简单必须的html标签,从未给标签添加点击事件,这次页面添加事件. >写入html页面,可以在<head>标签内 也可以在<body>标 ...