嵌入式1.docx

上传人:b****1 文档编号:10301765 上传时间:2023-05-24 格式:DOCX 页数:15 大小:755.71KB
下载 相关 举报
嵌入式1.docx_第1页
第1页 / 共15页
嵌入式1.docx_第2页
第2页 / 共15页
嵌入式1.docx_第3页
第3页 / 共15页
嵌入式1.docx_第4页
第4页 / 共15页
嵌入式1.docx_第5页
第5页 / 共15页
嵌入式1.docx_第6页
第6页 / 共15页
嵌入式1.docx_第7页
第7页 / 共15页
嵌入式1.docx_第8页
第8页 / 共15页
嵌入式1.docx_第9页
第9页 / 共15页
嵌入式1.docx_第10页
第10页 / 共15页
嵌入式1.docx_第11页
第11页 / 共15页
嵌入式1.docx_第12页
第12页 / 共15页
嵌入式1.docx_第13页
第13页 / 共15页
嵌入式1.docx_第14页
第14页 / 共15页
嵌入式1.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式1.docx

《嵌入式1.docx》由会员分享,可在线阅读,更多相关《嵌入式1.docx(15页珍藏版)》请在冰点文库上搜索。

嵌入式1.docx

嵌入式1

 

嵌入式系统设计

实验报告

 

专业班级:

09通信工程2班

姓名:

学号:

实验日期:

2012年11月2日

指导老师:

 

实验:

基于linux系统QT图形界面的简单开发

一.实验目的:

1.熟悉如何在LINUX环境下安装QT环境。

2.了解如何在QT环境下进行图形界面的编程与开发。

二.实验背景:

Qt是用来开发多平台GUI和应用程序的C++工具包。

它除了提供C++类库之外,还提供了很多工具,使得开发更加快速容易。

Qt支持多平台和国际化。

因此,Qt开发出来的程序有更强的适应性。

QtC++工具包自从1995年开始就已经成为许多商业软件的核心。

Qt被很多公司使用,如:

AT&T,IBM,NASA,Xerox和其他的一些小公司和组织。

在保持易用性和强大功能的前提下,Qt3.1增加了很多重要的函数和新的类。

Qt的类尽可能的降低开发者的工作量,并且提供统一的接口以利于学习,Qt是完全面向对象的。

1、Qt概要

Qt包含了丰富的部件(在Windows术语中叫控件),这些部件提供了一些标准的功能。

Qt引进了一种创造性的内建对象通信机制--信号和槽,来代替过去不安全的回调技术。

Qt还提供了传统的事件模型来处理鼠标按下,键盘敲击等事件。

Qt多平台应用可以使用现代程序设计需要的所有用户界面功能,如:

菜单,上下文菜单,拖放,和可停靠工具栏等。

直观的命名规则和统一的设计方法简化了程序的设计。

Qt提供了一个视觉化的用户界面设计工具--QtDesigner。

它支持Qt强大的布局功能。

它可以用来设计GUI或者通过内建的C++代码编辑器创建一个完整的程序。

Qt可以很好的支持二维和三维的图形。

它是平台无关OpenGL设计GUI工具包的事实标准。

Qt可以使用标准的数据库创建平台无关的数据库应用。

它内建了很多数据库的驱动,如:

Oracle,MicrosoftSQLServer,SybaseAdaptiveServer,PostgreSQL,MySQL,和ODBC-compliant等。

QtDesigner完全整合了Qt的数据库功能,因此它可以提供数据库资料预览。

包含了数据库的Qt相关部件,内建和自定制的部件都可以增加数据感知功能。

利用Qt的风格和主题,Qt在很多支持的平台上具有本地外观。

一份源代码,只需要重新编译就可以运行于Windows(95,98,NT4,ME,2000,XP),MacOSX,Linux,Solaris,HP_UX和其他支持X11的各种Unix系统。

程序也可以运行于嵌入Qt的系统。

QtQt的qmake工具可以生成于目标平台相适应的makefiles或者.dsp文件。

许多用户在单一平台下使用Qt开发,如:

Windows,MacOSX和Unix系统。

既然Qt的体系结构利用了平台底层的属性,所以它在特定的平台下会支持该平台特有的属性,例如:

在Windows下支持ActiveX,在Unix下支持Motif。

Qt使用Unicode并且提供了大量的国际化支持。

Qt提供QtLinguist和其它的一些工具来支持翻译。

应用程序的文本可以很容易的使用和混合许多Unicode支持的语言,如:

阿拉伯文,中文,英文,希伯莱文,日文,俄文等。

Qt为许多特定的领域提供了特定的类。

例如:

XML模块包括了SAX和DOM解析器。

通过使用与STL兼容的Qt集成类,对象可以保存在内存中。

通过标准的协议,Qt的输入输出和网络类支持本地和远程的文件处理。

通过使用插件和动态库,Qt应用程序可以扩展他们的功能。

插件提供了额外的解码器,数据库驱动,图像格式,风格和部件等。

动态库可以提供没有范围约束的功能。

这些插件和动态库作为产品来出售。

Qt是一个被广泛使用的成熟的C++工具包。

除了在商业上的应用之外,免费版本的Qt还是Linux桌面环境的基础。

的多平台开发系统,Qt视觉化的开发方式,和高效的API将使得应用程序的开发更轻松,更具有乐趣。

2、部件

Qt具有一系列丰富的部件(按钮,卷轴等)可以满足很多应用。

如果有特殊的需要,你可以很容易和灵活派生出子类。

Qt提供了很多部件。

所谓部件就是一个视觉元素,它们做和在一起来构成用户界面。

按钮,菜单,卷轴,消息窗口和应用程序窗口都是部件的例子。

Qt的部件并不严格区分控件和容器;所有的部件即可以用作控件有可以用作器。

通过继承现有的Qt部件可以很容易的定制自己的部件。

当然在极少数情况下,为了特殊的应用,有可能要重头开始创建自己的部件。

部件是QWidget,它的子类或者由这些子类创建的自定制类的实例。

一个部件可以包含很多子部件。

这些子部件显示在父部件的区域内。

一个没有父部件的部件我们称之为顶层部件(如一个窗口),它一般会在桌面环境的任务栏上占据一个位置。

任何部件都可以使顶层部件,任何部件都可以成为其他部件的子部件。

布局管理器会自动的安排子部件在父部件区域中的位置,当然你也可以手动来安排。

当父部件无效,隐藏或者被删除的时候,这些动作也会影响相应的子部件。

标签,消息框,工具提示等可以使用不止一种的颜色,字体和语言。

例如:

通过使用HTML的子集,Qt的文本部件就可以显示多语种的文本。

3.信号和槽

Qt的内部对象通讯使用信号和槽机制。

信号和槽机制很容易理解和使用,并且被QtDesigner支持。

GUI程序需要相应用户的动作。

例如,当用户点击一个菜单项或者工具栏按钮的时候,程序就会执行相应的代码。

一般情况下,我们希望任何类型的对象之间可以互相通讯。

编程人员需要把相应的事件和代码联系起来。

以前的工具包使用了一种回调机制,这种机制不是类型安全的,它不够强壮并且不是面向对象的。

Trolltech提出了“信号和槽”的解决方案。

它是一种强大的内部对象通讯机制,可以完全代替以前工具包使用的回调和MessageMaps机制。

信号和槽非常灵活,完全面向对象并且是使用C++来实现的。

使用以前的回调机制,为了把一个按钮和一段执行代码联系起来,则必须给这个按钮传递一个函数指针。

这样,当这个按钮被按下时,这个函数就会被调用。

但是以前的工具包并不保证传给这个函数的参数类型是正确的,这样就很容易发生问题。

此外,回调机制把一个GUI元素和一个函数紧密的联系在一起,这样就很难独立的开发一个类。

Qt的信号和槽却不同,当一个事件发生时,Qt部件会发送一个信号。

例如,当一个按钮被按下的时候,它就可能发送"clicked"信号。

编程人员可以创建一个函数(槽)并调用connect()函数把这个槽和信号联系起来。

Qt的信号和槽机制并不要求一个类知道另一个类的信息,因此我们可以开发出高度可重用的类。

信号和槽是类型安全的,当类型不匹配的时候,它会给出警告。

例子,假设把退出按钮的clicked()信号和程序的quit()槽联系在一起,那么当用户点击退出按钮将终止程序。

代码可能如下:

connect(button,SIGNAL(clicked()),qApp,SLOT(quit()));

信号和槽之间的联系可以在程序运行期间动态的添加和删除。

信号和槽的实现扩展了C++语法并且充分利用了C++的面向对象的性质。

信号和槽是类型安全的,可以重载或者重新实现,而且它们在类中可以定义为公有的,保护的或者私有的。

4.GUI程序

用Qt可以既快速又容易的创建GUI程序,你可以手工编写代码也可以通过视觉化的编程工具QtDesigner来生成。

Qt提供了创建GUI程序所需的所有类和函数。

你可以使用Qt来创建带有菜单,工具栏和状态栏的基于视窗的程序,也可以创建带有按钮和标签的基于对话框的程序。

Qt支持单文档界面(SDI)和多文档界面(MDI)。

此外,Qt也支持拖放和剪贴。

工具栏可以在其范围内任意移动,拖放到其他地方或者处于飘浮状态。

这些功能是内建的,你不需要添加额外的代码。

当然,如果需要你可以改变它的性质。

Qt简化了程序的设计。

例如:

如果菜单项,工具按钮和快捷键执行同一个动作,那么这个动作的实现代码可以只要一份。

Qt还提供了消息框和一系列的标准对话框来与用户交互。

如:

选择文件,文件夹,字体和颜色等。

实际上,你有可能只是简单的使用Qt的一个语句就可以实现这个功能。

 

三.实验环境:

CentOS6.0,QTdesigner软件环境

qt-everywhere-opensource-src-4.7.4

四.实验内容及步骤:

1.在windows下安装虚拟机,然后使用虚拟机安装CentOS6.0。

安装CentOS的时候,需要将系统定制安装,把开发需要的软件包都选择,然后进行安装。

2.打开安装好的虚拟机,登录图形化界面,使用管理员模式登录,因为开发QT图形界面时需要较高权限。

3.因为安装时选择了开发的软件包,CentOS自带有QT3以及简易的QT4designer(之后再安装QT4)。

 

4.打开终端,建立一个实验目录,进入该目录建立qt实验目录

#mkdirshiyan

#cdshiyan/

#mkdirqt1

#cdqt1/

5.在该目录下使用VI编辑器进行图形界面的编程,在一个窗口中建立一个按键部件,一个滑动器部件,一个LCD数字显示部件。

#vimain.cpp

键入如下程序:

#include

#include

#include

#include

#include

classMyWidget:

publicQVBox

{

public:

MyWidget(QWidget*parent=0,constchar*name=0);

};

MyWidget:

:

MyWidget(QWidget*parent,constchar*name)

:

QVBox(parent,name)

{

QPushButton*quit=newQPushButton("Quit",this,"quit");

connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));

QLCDNumber*lcd=newQLCDNumber(2,this,"lcd");

QSlider*slider=newQSlider(Horizontal,this,"slider");

slider->setRange(0,99);

slider->setValue(0);

connect(slider,SIGNAL(valueChanged(int)),lcd,SLOT(display(int)));

}

intmain(intargc,char**argv)

{

QApplicationa(argc,argv);

MyWidgetw;

a.setMainWidget(&w);

w.show();

returna.exec();

}

解释:

qslider.h和qlcdnumber.h在这里是因为使用了滑动器和LCD数字显示部件,QSlider和QLCDNumber。

qvbox.h在这里是因为使用了Qt的自动布局支持。

Widget是窗口部件

QpushButton是按键

QLCDNumber是LCD数字显示

Qslider是滑动器

这里涉及到QT的插槽机制,Qt的内部对象通讯使用信号和槽机制。

信号和槽机制很容易理解和使用,并且被QtDesigner支持。

GUI程序需要相应用户的动作。

例如,当用户点击一个菜单项或者工具栏按钮的时候,程序就会执行相应的代码。

一般情况下,我们希望任何类型的对象之间可以互相通讯。

编程人员需要把相应的事件和代码联系起来。

以前的工具包使用了一种回调机制,这种机制不是类型安全的,它不够强壮并且不是面向对象的。

Trolltech提出了“信号和槽”的解决方案。

它是一种强大的内部对象通讯机制,可以完全代替以前工具包使用的回调和MessageMaps机制。

信号和槽非常灵活,完全面向对象并且是使用C++来实现的。

使用以前的回调机制,为了把一个按钮和一段执行代码联系起来,则必须给这个按钮传递一个函数指针。

这样,当这个按钮被按下时,这个函数就会被调用。

但是以前的工具包并不保证传给这个函数的参数类型是正确的,这样就很容易发生问题。

此外,回调机制把一个GUI元素和一个函数紧密的联系在一起,这样就很难独立的开发一个类。

Qt的信号和槽却不同,当一个事件发生时,Qt部件会发送一个信号。

例如,当一个按钮被按下的时候,它就可能发送"clicked"信号。

编程人员可以创建一个函数(槽)并调用connect()函数把这个槽和信号联系起来。

Qt的信号和槽机制并不要求一个类知道另一个类的信息,因此我们可以开发出高度可重用的类。

信号和槽是类型安全的,当类型不匹配的时候,它会给出警告。

例子,假设把退出按钮的clicked()信号和程序的quit()槽联系在一起,那么当用户点击退出按钮将终止程序。

代码可能如下:

connect(button,SIGNAL(clicked()),qApp,SLOT(quit()));信号和槽之间的联系可以在程序运行期间动态的添加和删除。

信号和槽的实现扩展了C++语法并且充分利用了C++的面向对象的性质。

信号和槽是类型安全的,可以重载或者重新实现,而且它们在类中可以定义为公有的,保护的或者私有的。

利用这个机制,我把按键信号与退出信号连在一起,把滑动器的滑动信号与LCD数字显示的显示信号连在一起,然他们能彼此联系。

滑动器滑动能使LCD的数字从0到99变动,点击按键可以使窗口退出,也就是关闭。

6.程序键入完成之后,保存退出,这样在这个文件夹里就有一个main.cpp

7.使用QT进行编译,键入qmake–project会出现一个.pro文件,然后键入qmake会出现一个Makefile文件

8.然后用make命令,会出现一个可执行文件。

9.执行这个可执行文件./qt1。

10.拖动滑动器,LCD数字会发生相应的改变。

到此,使用QT3来简单开发图形界面就已经完成了。

但是使用QT4,在图形界面下使用其QT4Designer开发软件,会使开发变得更简单。

11.

①首先得安装QT4的源码包:

qt-everywhere-opensource-src-4.7.4.tar

#tar–vxzfqt-everywhere-opensource-src-4.7.4.tar

②解压软件包:

#cdqt-everywhere-opensource-src-4.7.4

③进入安装目录:

#./configure

④默认配置:

#make

#makeinstall

⑤安装软件包:

安装需要几个小时的时间,安装完成之后,需要修改配置文件。

#env

⑥显示环境变量:

由于我安装QT4的时候是默认安装,安装路径是/usr/local/Trolltech/qt-4.7.4-pc/,所以用export命令将一些环境变量改成这个目录就行,比方:

exportQTDIR=/usr/local/Trolltech/qt-4.7.4-pc/。

⑦之后在图形化界面applications→programming→QT4designer。

⑧之后选择Widget,在窗口中添加按键部件,滑动器部件,LCD显示部件。

⑨修改按键名称,以及建立插槽信号联系。

⑩我把点击pushbutton的信号付给框体,框体的反应信号时关闭。

再把slider的拖动信号付给lcdnumber的显示信号。

如上图红方框显示。

然后退出再保存为qt1.ui的文件,我保存在实验目录下:

再建立一个main.cpp的文件,用VI编辑器进行编辑:

#include"ui_qt1.h"

intmain(intargc,char*argv[])

{

QApplicationapp(argc,argv);

QWidget*widget=newQWidget;

Ui:

:

Formui;

ui.setupUi(widget);

widget->show();

returnapp.exec();

}

然后目录下会出现一个main.cpp文件:

然后使用:

#qmake–project

#qmake

#make

会产生一个可执行文件,用./qt1执行:

移动滑动器,观察lcd显示器的变化:

五.实验总结:

通过两个周末在实验室里的学习,学习使用熟悉如何在LINUX环境下安装QT环境,了解如何在QT环境下进行图形界面的编程与开发,进一步加强了对嵌入式的熟悉和了解。

张老师在兢兢业业的向我们传授实践知识的同时也向我们提问相关理论问题,让我们在学习的过程加深对实践和理论两者之间的联系,知道每一个步骤的发生的原因及产生相应的结果,即对实验的来龙去脉有了更清楚的认识,为今后的学习打下了一定的基础。

相信在接下来的实验中,我们会在张老师的引导下,做起实验来更能得心应手,轻车熟驾!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2