一、需求描述:

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的信号分析简单应用软件的设计的更多相关文章

  1. 【Qt编程】基于Qt的词典开发系列<十一>系统托盘的显示

    本文主要讨论Qt中的系统托盘的设置.系统托盘想必大家都不陌生,最常用的就是QQ.系统托盘以简单.小巧的形式能让人们较快的打开软件.废话不多说,下面开始具体介绍. 首先,新建一个Qt Gui项目,类型选 ...

  2. 【Qt编程】基于Qt的词典开发系列&lt;八&gt;--用户登录及API调用的实现

    在上一篇文章<调用网络API>中,我仅仅讲述了怎样直观的使用API接口以及调用API后返回的结果,本文则从程序实现的角度来实现API的调用.当然本程序的实现也是借助于扇贝网的API接口文档 ...

  3. 【Qt编程】基于Qt的词典开发系列<六>--界面美化设计

    本文讲一讲界面设计,作品要面向用户,界面设计的好坏直接影响到用户的体验.现在的窗口设计基本都是扁平化的,你可以从window XP与window 8的窗口可以明显感觉出来.当然除了窗口本身的效果,窗口 ...

  4. 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计

    这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...

  5. 【Qt编程】基于Qt的词典开发系列<二>--本地词典的设计

    我设计的词典不仅可以实现在线查单词,而且一个重大特色就是具有丰富的本地词典库:我默认加入了八个类型的词典,如下所示: 由于是本人是通信专业,因此加入了华为通信词典.电子工程词典,又由于我喜爱编程,也加 ...

  6. 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动

    在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口 ...

  7. 【Qt编程】基于Qt的词典开发系列<四>--无边框窗口的缩放与拖动

    在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词 ...

  8. 【Qt编程】基于Qt的词典开发系列--后序

    从去年八月份到现在,总算完成了词典的编写以及相关技术文档的编辑工作.从整个过程来说,文档的编写比程序的实现耗费的时间更多.基于Qt的词典开发系列文章,大致包含了在编写词典软件过程中遇到的技术重点与难点 ...

  9. 【Qt编程】基于Qt的词典开发系列<一>--词典框架设计及成品展示

    去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...

随机推荐

  1. python: pandas模块

    10分钟入门 pandas 评:我跟作者的智商差距是有多大,才能让我用60分钟看完作者认为10分钟的内容... 详细内容见 Cookbook 习惯上我们先导入 : In [1]: import pan ...

  2. 用bootstrap的tab插件做一个图层切换效果(感觉会误导淫们,大家当乐子看吧)

    小伙伴们啊,我JS真的是个渣渣,所以总想要偷懒,于是为了实现效果就把tab插件给改了(各位大神轻拍啊,我是小白,很纯洁滴,小心脏也很脆弱)…… 最近做的项目为了考虑以后的移动设备兼容性,所以用了Boo ...

  3. 使用html5兼容低版本浏览器

    因为html5 新出的一些语义化的标签,在低版本浏览器下不能识别,举个例子,比如你写了一个 header 标签中,写了一段文本,在低版本浏览器下,肯定是能看到的,但是,那是他是不认识 header标签 ...

  4. Android 设计随便说说之简单实践(合理组合)

    上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...

  5. ITPub 上的一道题,学习下思路

    有意思的,从别处看来的即可为己用--拿来主义 数据库:MS SQL 2000: drop table mytest go create table mytest (   sn      int,    ...

  6. 数据库学习(整理)----6--Oracle如何快速备份和多次备份数表数据

    1.说明:  这里假设一种应用场景! 假设,银行系统中有大量的数据需要及时备份,如何才能快速高效呢! 条件需求: (1).不能设置同步锁(设置的会影响银行正常业务进行!使得银行系统处于维护状态,这是不 ...

  7. Java RMI 框架_远程方法调用(2016-08-16)

    概念: Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可 ...

  8. POJ 3280 Cheapest Palindrome(DP 回文变形)

    题目链接:http://poj.org/problem?id=3280 题目大意:给定一个字符串,可以删除增加,每个操作都有代价,求出将字符串转换成回文串的最小代价 Sample Input 3 4 ...

  9. Win32中GDI+应用(三)---Graphics类

    在我理解看来,Graphics是一个device context和你的drawing conetent之间的一个中介.它存储了device context的相关属性,以及drawing content ...

  10. MySQL常用函数 转载

    一.数学函数ABS(x)                    返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x)                返 ...