




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I目前,嵌入式系统发展迅速,应用广泛。基于Qt/E的嵌入式GUI设计成为国家以及部分企业支持的重点方向。随着当前各种手持设备、无线设备及信息家电等嵌入式产品的迅猛发展,相应的嵌入式软硬件设计技术也在发生深刻的变化。如今,越来越多的嵌入式终端需要一个图形化的人机接口界面(GUI),良好的人机接口界面是嵌入式系统设计的一个关键技术,能够极大地提高人机交互的本文详细阐述了在博创公司的UP-TECHPXA270-S教学科研平台上实现基于嵌入式Linux系统和QT4图形界面显示终端的过程。本文以项目《基于linux&QT4的多媒体浏览器》为实例,对该系统图形用户界面以及功能实现等进行了描述。关键词:嵌入式LinuxQT4GUIAtpresent,therapiddevelopmentofembeddedsystems,awiderangeofapplications.BasedonQt/EembeddedGUIdesigntobecomepartofthecountryandthefocusofthedirectionofenterprisesupport.Withthecurrentvarietyofhandhelddevices,wirelessdevicesandinformationappliances,suchastherapiddevelopmentofembeddedproducts,thecorrespondingdesignofembeddedhardwareandsoftwaretechnologyisalsoundergoingprofoundchanges.Today,moreandmoreembeddeddevicesneedGraphicalUserInterface(GUI),agoodGraphicalUserInterfacedesignofembeddedsystemsisakeytechnologytogreatlyimprovetheefficiencyofhuman-cDescribedindetailinthisarticle,TheUP-TECHPXA270-SteachingandresearchplatformbasedonembeddedsystemsandLinuxdisplayterminalQT4GUIprocess.Inthispaper,theproject"MultimediaBrowserbasedonthelinuxplKeyword:EmbeddedLinuxQT4GUI北京理工大学珠海学院2009届本科生毕业设计 I II 61.1选题背景 61.2选题目标 61.3需求分析 71.3.1用户需求分析 71.3.2功能需求分析 71.4本章小结 9 2.1QT的背景介绍 2.2QT实现的结构原理 2.3QT应用程序的实现 2.4本章小结 3系统框架描述 3.1系统模块 3.2主要功能 3.3平台简介 3.5本章小结 北京理工大学珠海学院2009届本科生毕业设计4详细设计 4.1主界面设计 4.2播放器模块设计 204.2.1MPlayer在嵌入式开发系统中的应用 204.2.2QT中调用Mplayer 204.2.3播放器模块GUI界面设计 4.3网页浏览器模块设计 234.3.1Webkit引擎 234.3.2QT调用Webkit类和实现方法 234.3.3网页浏览器GUI界面设计 254.4数码相框模块设计 254.4.1QT的绘图设备 4.4.2数码相框的接口函数 4.4.3mount相关函数的使用 284.4.4数码相框的GUI界面设计 294.5时间设置模块设计 4.6QT自定义风格样式设计 4.7局域聊天模块设计 4.7.1服务端设计 4.7.2客户端设计 4.8Tslib与触摸屏 4.8.1触摸屏原理 北京理工大学珠海学院2009届本科生毕业设计V4.8.2Tslib1.4的编译 4.8.3TsLib的相关配置 4.9本章小结 5交叉编译与环境配置 5.1Linux内核裁剪与烧写 5.2编译QTE源码 5.3交叉编译与环境配置 5.4移植运行库和字体库 5.5设置开发板连接以太网 5.6运行程序 435.7本章小结 6测试及运行结果 6.1测试目标 6.2测试预期结果 6.3运行结果 6.4本章小结 7论文总结 参考文献 61.1选题背景随着新的ARM芯片不断问世以及这些芯片的价格下降,嵌入式产品开始潜移默化的取代早期的一些单片机,并在社会各行各业中占有越来越重要的位置,嵌入式产品也由此成为众多工程师选择开发高端产品的芯片首选。中国成为“世界制造中心”甚至“设计中心”的趋势,必然导致对小型数字控制系统的需求越来越大。在嵌入式系统开发方面,最核心的就是微处理器芯片和嵌入式操作系统。其中ARM已经给出了理想的一个答案,而在嵌入式操作系统方面,从上世纪80年代开始,出现了各种各样的商用嵌入式操作系统百家争鸣的局面,比较著名的有WindRiver公司的VXWorks、PSOS和WindowsCE等等这些操作系统大部分是为专有系统而开发的。嵌入式Linux是一款遵循GPL协议的免费使用和自由传播的实时嵌入式操作系统,并且拥有一大批的社区维护和爱好者。它的源码开放性允许任何人可以获取并修改Linux的源代码。这样一方面大大的降低了开发的成本,另一个方面又可以提高开发产品的效率。嵌入式Linux支持X86,PowerPC,ARM,XSCALE等多种体系结构,并且移植到多种硬件平台。这对于经费,时间受限制的研究和开发项目很有吸引力,并且Linux采取一个统一的框架对硬件管理,所以上层应用程序可以方便的移植到不同的平台上。基于以上的原因,本人决定使用嵌入式Linux搭配PXA270开发板来构建这个项目。在系统应用层GUI中主要使用QT,QT是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。用户使用C++,对库的稳定性,健壮性要求比较高,并且希望跨平台开发的话,那么使用Qt是较好的选择。1.2选题目标基于上述背景,开发一个多媒体浏览器项目,本人使用嵌入式Linux搭配PXA270开发板来构建这个项目。在系统应用层GUI中主要使用一个基于多平台的C++图形用户界面应用程序框架--QT。利用QT4编写应用程序,例如数码相框模块,电子书模块,浏览器模块,多媒体音视频模块等。根据系统的需求,裁减、7移植Linux内核,制作合适的文件系统。分析系统功能和接口,添加各种驱动程驱动,蓝牙驱动等。根据应用程序中的每个功能模块,分析各个模块的用户界面接口和对人机交互图形化用户界面的接口设计。1.3需求分析1.3.1用户需求分析根据用户需求的分析,市场上也推出了多功能、多应用的产品,今年多媒体产品的变化归纳为“一低两多”:成本低、产品多、功能多。多媒体电子产品的市场需求将稳步上升,例如具备音视频功能的便携式多媒体产品将会持续增长,预计年销量将会由2006年的3亿台左右增至2011年的10亿台。面对如此巨大的市场,终端厂商在进行功能和方案选择时会充分掌握市场动向。对此,本项目的操作系统是基于开源的Linux系统,这在成本上有着很大的优势,基于免费版的QT4也是使得系统的功能接口相当强大。未来几年,中国多媒体电子产品市场将逐渐走向成熟.市场需求和产品销量会保持大幅增长.产品供应链中的各类企业将获得巨大商机。尤其是随着产品价格的不断下降,这种快速发展的态势会愈加明显。中国市场必然会获得更大的发展空间。由此,本项目也适应用户需求,开发多种功能模块:数码相框功能,音乐播放,视频播放,日历、时钟显示,网页浏览器,电子书,局域聊天等。1.3.2功能需求分析根据用户需求,和对产品的定位,划分以下功能:支持功能所需硬件2音乐播放格式MP3/WAV7视频播放,格式AVI8局域聊天1控制芯片(PAX270+64Mflash+64MSRAM)3音频解码器CS42014MMC总线控制器5USB主从接口8在系统层将移植进嵌入式linux的操作系统。嵌入式linux系统稳定,功能强大,支持多种硬件平台,简单易用且开放源代码,可广泛用于信息家电领域,当然应用“多媒体播放器”这个项目来说就是再合适不过了。该linux操作系统采用linux2.6.9内核,其他功能支持如下所示。驱动程序包含串口、100M网口、IDE接口、SD/MMC卡、NO音频录音放音、LCD、触摸屏、USBHOST、USBDEVICE、Camera、键盘、RTC等多种驱动。驱动程序包含串口、100M网口、IDE接口、SD/MMC卡、NORFlash、等多种驱动,支持多种文件系统,像ROMFS,CRAMFS,FAT等等,支持IDE硬盘的挂接,支持framebuffer,支持USBHOST,支持QT等图形系统,支持MP3播放和视频播放,支持多种网络应用,像FTP,HTTP,Telnet之类的网络应用。考虑到开发成本、耗能和开源软件的优势等问题,本项目选用嵌入式lin操作系统是非常适合的。linux操作系统在内核的剪裁与编译,制定出适合ARM体系的PXA270处理器的操作系统等这些方面的技术已十分成熟。而在界面开发方面,使用的开发软它功能强大并且是可视开发,便于对界面设计的“多媒体浏览器”所有的功能包括jpg/bmp图片的播放,MP3,WAV音频播放,AVI视频播放,蓝牙传输,无线网卡的连接,各种卡类的识别与使用。而在linux环境下实现这些功能有很多相应功能的开源软件可以借鉴来,经过有针对性地处理后使其适合本项目产品使用,在技术上是完全可以做到的。本项目所需的硬件清单如下:表1-2具有多媒体处理能力的CPU芯片较大容量的存储器USB接口,USB鼠标、键盘真彩LCD显示器音频解码,输出芯片视频解码,输出芯片支持蓝牙通信的芯片组串行接口100MEtherNet网卡小型键盘供电,及其它辅助芯片根据上表,需要的硬件模块在UP-TECHPXA270-S硬件实验平台上已一应俱全。音视频模块,对音视频输入输出功能都有着很好的支持;存储卡模块支持SD/MMC卡;USB主从接口模块支持U盘读取功能;蓝牙模块支持与外部蓝牙设备间的通讯等等。各种各样的接口便于我们扩展设计开发,当然这为“多媒体播放9器”在插槽功能,音视频输出功能,USB通讯功能等方面提供了很好的硬件条件。在此平台上还配制了8英寸的TFT真彩液晶屏,可模拟的充当此次项目“多媒体播放器”的用户交互平台,支持640*480的分辨率。UP-TECHPXA270—S在存储系统方面也有着很高的配置,内置了高性能价格比的NANDFLASH64M内存,支持大容量的用户差异图形图片和媒体文件的存储。CPU的能力当然是毋庸置疑的,IntelXscale结构芯片的PXA270在各方面都表现了很强悍的能力,在目前市场上来说也是一款很先进的处理器芯片。PXA270处理器是Intel公司目前性能最为强劲的移动处理器,已经成为高端移动设备中最受欢迎的处理器之一。PXA270最高主频可达624MHz,它引入了X86架构奔腾4系列上的多媒体技术——MMX技术,能够大大提升多媒体处理能力,用户通过该技术可以在VGA上面播放高质量的MPGE4视频;同时加入了IntelSpeedStep动态电源管理技术,在保证CPU性能的情况下,最大限度地降低移动本章主要介绍本项目的选题背景、意义,选题目标和项目需求分析,根据产品市场和本人技术水平情况,按需求划分软件功能模块,还根据软件功能和现有资源的性能对硬件需求做了详细分析。2.1QT的背景介绍Qt/Embedded是著名的Qt库开发商Trolltech公司开发的面向嵌入式系统的Qt版本,开发人员多为KDE项目的核心开发人员。许多基于Qt的XWindow程序可以非常方便地移植到Qt/Embedded上,与X11版本的Qt在最大程度上接口兼容,延续了在X上的强大功能,在底层彻底摒弃了Xlib,仅采用framebuffer作为底层图形接口。Qt/Embedded类库完全采用C++封装。丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面,使用X下的开发工具QtDesigner可以直接开发基于Qt/Embedded的UI(用户操作接口)界面。越来越多的第三方软件公司也开始采用Qt/Embedded开发嵌入式Linux下的应用软件。2.2QT实现的结构原理Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/EmbeddedAPI可用于多种开发项目。Qt/Embedded的实现结构如下:QT的应用程序QT的图形事件QT/EmbeddedFrameBuffer设备驱动硬件平台图2-1QT的实现结构图Qt/Embedded的底层图形引擎基于framebuffer。Framebuffer是在Linux内核架构版本2.2以后推出的标准显示设备驱动接口。Framebuffer驱动程序的序必须将画面缓冲区的存储空间(物理空间)重新映射到一个不加高缓存和写缓一种被称为信号和槽的非常强大的机制;可查询和可设计的属性项;强大的事件和事件过滤器;根据上下文进行国际化的字符串翻译;完善的时间间隔驱动QApplication是必须构造的Qt主对象,需象,并把命令行参数传递给这个对象,每个Qt应用程序有且仅有一个QApplication对象,该对象必须在做其他事之前创建,这个对象处理一些底层connect(objectl,signall,object2,slot1);2.3QT应用程序的实现主要工作是基于已有的Qt类编写用户类。QtLinguist:Qt语言学家。用来翻译应用程序。以此提供对多种语言的支Qmake:使用此工具可以由简单的、与平台无关的工程文件来生成编译所需的Makefile。uic:用户界面编译器。在程序编译时被自动调用,通过ui_*.h文件生成应make-project//生成.pro的工程文件//生成Makefile//编译随着越来越多的第三方软件公司利用Qt/Embedded开发嵌入式Linux下的应现的结构原理,还简述了QT的相关特性。此外,也介绍版提供的API。应用层包括六大模块,每个模块有各自的GUI界面。日历嵌入式GUI(QT4)LCDUSB网卡蓝牙键鼠驱动驱动驱动驱动驱动系统层嵌入式Linux操作系统网页图片浏览多媒体局域聊天屏书接口层图3-1系统模块图图片浏览模块实现了放大缩小、旋转、全屏浏览、前移、后移、浏览U盘中电子书浏览功能支持txt格式的文本文档。网页浏览功能:基于WebKit引擎的网页浏览。时钟、日历显示:利用友好的界面显示、设置时钟、日历等。多媒体播放模块:利用MPlayer的解码器,实现以下功能:3.3平台简介核心板和主板的接口设计充分考虑了升级产品的兼容性,核心板可以升级到从而大大减轻了用户扩展新功能的负担。模拟功率放大器触摸屏接口NorthFlashUSB1.1DEVICEUSB1.1HOST总线隔离驱动电路KEYPAD图3-3以PXA270为核心的硬件架构图基于IntelXScale架构内核的嵌入式处理器PXA270,内部集成iwmmx指令,加速处理器对多媒体数据的处理速度。辅助CPULPC2119ARM7TDMI-S。●操作系统:2.6.X;●驱动程序:提供所有板级设备的驱动程序;2)UP-TECHPXA270-S平台配套线缆:3)PXA270-S开发平台硬件资源:16MNorFLASH。通过256Pin2mm间距直插针与主板连接。●Double100MEtherNet网卡:由两片DM9000构成的双网卡,●4HOST/1DEVICEUSB接口:PXA270的主USB口扩展为4个,由AT43301构成USBHUB,其中电源管理用MIC2505。●3UART/IrDA/RS485:2个RS232串口。1个RS485串口,1个IrDA收发器,均从处理器的ICPUART引出,由FPGA内部逻辑切换。●LCD显示屏:采用8寸18bit真彩屏,同时预留一个24bitLCD接口。●TouchScr:通过UCB1400芯片和AC97总线实现。●AC97AUDIO:采用UCB1400CODEC和LM4880功放芯片,具有放音、录音功能。●板载17键小键盘:从处理器键盘接口扩充。●电源、RESET、RTC、JTAG等必须资源。电源电路具有专门逻辑,可以实现软件关机功能。PXA270-S开发平台需要DC12V供电。●ARM7辅助处理器:平台上配置LPC2119ARM7芯片,配合扩展板可完成市场上LPC2119开发板的大部分功能。LPC2119通过SPI和IIC总线与PXA270通信。●AD电位器:由LPC2119扩展出2路AD采集。●CANBUS:设置2个CAN口,由LPC2119扩展和TJA1050芯片构成。OTG/Device接口。MIC2526作为电源控制器件。●IEEE1394总线接口:由TSB43AA82PGE扩展出2个1394接口(FireWire火线接口)。3.5本章小结本章介绍了本项目的系统模块,包括每个模块的功能描述。此外,还介绍了系统的硬件架构以及开发平台的软件、硬件模块资源等。videocaptureview.hvmsmainwindow.hvideocaptureview.hvmsmainwindow.hvideocapturedevicefactory.hredevice.cPP4详细设计本系统主界面中心为2D渲染的立体菜单选择,背景用绚丽图片衬托,系统共分以下模块:数码相框,音视频播放器,电子书,网页浏览器,时钟显示,局域网聊天。整个系统包括以下文件:camerasettingscamerasettingscppeditor.cppimagemairwindow.cpPimagewidget.cppmain.cppmovleplayer,cppnorwegianwoodstyle.cppvice.cppwideocapturevew.cppwideocapturevew.cppanalogdlockhcamerasettings,hcvvideocapturedevice,hdaytime2.heditor.hlter,himagemainwindow.bimagewidget.hmovleplayer.hpictureflow.htepclientpictureflow.htepclient.hthumbbutton.hui_daytimeui_camerabase.ui图4-1项目文件名称图各个模块有独立的GUI,界面效果吸引视觉,以下模块详细设计。4.1主界面设计本系统各模块由主界面进入,以下为模块框架:多媒体播放多媒体播放器局域网聊天网页浏览器时钟显示音视频播放器数码相框电子书图4-2系统模块框架图系统主界面在中心添加pictureflow图片滑动效果,每个图片为作为一个模PictureFloPictureFloPictureFlosetBackgroaddSlidePictureFloPictureFloSoftwareRewStatewAnimatorndererreset()Stop()reflectionupdate()render()Effect()renderSlid图4-3PictureFlow效果实现相关类及函数图以下为主要的类和实现方法:1)classPictureFlow;此类继承于Qwidget类,用于创建一个weidget窗QColorbackgroundColor();返回背景颜色;setBackgroundColor(constQColor&c);负责设置背景颜色,默认为黑QSizeslideSize()const;返回每张幻灯片(图片)像素大小;setSlideSize(QSizesize);设置每张幻灯片(图片)像素大小;QImageslide(intindex)const;返回中心索引的图片;ReflectionEffectreflectionEffect()const;返回倒影效果的值;setReflectionEffect(ReflectionEffecteffect);设置倒影效果;addSlide(constQPixmap&pixmap);在滑动区域添加图片;voidsetSlide();设置滑动区域的图片;showPrevious();showNext();负责图片向前、向后滑动的实现;render();负责渲染weidget窗口部件;paintEvent(QPaintEvent*event);负责绘画图片和背景;keyPressEvent(QKeyEvent*event);负责键盘按键触发事件:mousePressEvent(QMouseEvent*event);负责鼠标单击过滤事件,前后滑mouseMoveEvent(QMouseEvent*event);负责鼠标移动过程中的时间,鼠标坐标和标题跟随。mouseDoubleClickEvent(QMouseEvent*event);负责鼠标双击过滤事件进入相应模块。2)classPictureFlowPrivate;把PictureFlowState,PictureFlowAnimator,PictureFlowSoftwareRenderer,三个类都放在classPictureFlowState,实现界面所有滑动图片的必要状态信息,其slideHeight滑动区域的宽度、高度;reflectionEffect()图片倒影效果;intangle,spacing图片滑动时的偏移角度和图片间隔;intcenterIndex中心图片索引变量等。classPictureFlowAnimator,负责移动图片与图片之间的过渡,以实现类似CoverFlow的效果,以改变滑动区域(CoverFlow的效果:coverflow是苹果ipod首创的将多首歌曲的封面以3D界面的形式显示出来的方式。)。其中包括:voidstart(intslide);负责动画过渡的开始设置;voidstop(intslide);负责动画过渡的停止设置;voidupdate();负责动画过渡的每一帧更新;QTimeranimateTimer;标识动画时间的参考参数。classPictureFlowSoftwareRenderer,动画软件三维渲染。其中包括:init(),paint();实现三维渲染的界面初始化和绘图;render():renderSlides();负责三维渲染的过程;4.2播放器模块设计4.2.1MPlayer在嵌入式开发系统中的应用MPlayer是Linux上的电影播放器,它的功能十分强大,能够播放众多格式的文件,在X86PC机上运行很稳定,也可以把它移植到非X86CPU上的嵌入式系统中来。我们就是将MPlayer软件移植到ARM开发板中,让MPlayer运行在ARMMPlayer采用的编解码器包是libavcodec,这个编解码器包可以在多种平台码,它同时也是已知完成这些任务最快的解码器,MEncoder(MPlayer电影解码器)可以生成MPEG(MPEG-PS)格式的输出文件。它们只能用于libavcodec的mpeglvideo编解码器。4.2.2QT中调用Mplayer本模块主要是在播放音视频文件是创建一个进程Qprocess,此进程调用Mplayer作为后台解码器。ialogboollayer()VoidswitchPt(QMouspauseMPtput();open()图4-4播放器中主要实现函数图constQStringmplayerPath("mplayer");QStringListargs;args<<"XXX.avi";QProcess*myProcess=newQProcess;myProcess->start(mplayerPath,args)mplayerProcess->write("AAA")stopMPlayer();bool使用QprocesspauseMPlayer()。boolisplaying;作为音视频是否播放buffer(mplayerProcess->readLine());之后获取文件的播放movieFile=QFileDialog::getOpenFileNconnect(mplayerProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(mplayerEnded(int,QProcess::ExitStatus)));在此模块界面中设计了一个不规则窗体,添加按钮:播放,暂停,停止,全主要函数说明如下:pix.load(":/images/musicbg.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);resize(pix.size());setMask(pix.mask())其中pix为不规则窗体的背景图片,此部分为加载一个png图片。以下为将加载的图片绘画在窗口中:QPainterpainter(this)painter.drawPixmap(0,0,QPixmap(":/images/musicbg.png"));此外,在背景图片上添加相应的事件触发按钮,以下以打开按钮为例:Qimageopenimage.load(":/images/open.png");给opeQLabel*Labelopen->setPixmap(QPixmap::fromImage(openimage));把Labelopen->setGeometry(QRect(55,115,32,32));设置Label的坐标位置;Labelopen->installEventFilter(this);给Label安装事件过滤器。以下为鼠标点击及释放时的事件过滤事件:if(watched==Labelopen){if(event->type()==QEvent::MouseButtonPress)//检测鼠标点击事件;{QMouseEvent*mouseEvenif(mouseEvent->buttons()&Qt::LeftButton)//鼠标单击左键;martix.scale(0.8,0.8)QImagetmp=openimage.transformed(martix);//鼠标按下时的按钮动态效Labelopen->setPixmap(QPixmap::fromImage(tmp));}if(event->type()==QEvent::MouseButtonRelease){Labelopen->setPixmap(QPixmap::fromImage(openimage));//鼠标释放后显示的按钮图片;open()://调用打开文件的方法}此外利用同样方法创建play,pause,fullscreen,stop等按钮事件过滤。4.3网页浏览器模块设计个开源浏览器网页排版引擎,与之相应的引擎有Gecko(Mozilla,Firefox等使用的排版引擎)和Trident(也称为MSHTML,IE使用的排版引擎)。同时WebKit也是苹果MacOSX系统引擎框架版本的名称,主要用于Safari,Dashboard,Mail和其他一些MacOSX程序。WebKit所包含的了Gecko和KHTML后,仍然选择了后者,就因为它拥有清晰的源码结构、极快的渲染速度。Webkit是苹果公司自己的内核,也是苹果的Safari浏览器使用的内核。Webkit引擎包含WebCore排版引擎及JavascriptCore解析引擎,均是从KDE的KHTML及KJS引擎衍生而来,它们都是自由软件,在GPL条约下授权,同时支持BSD系统的开发。所以Webkit也是自由软件,同时开放源代码。QT内部包含有调用Webkit引擎的API,以实现网页浏览。4.3.2QT调用Webkit类和实现方法以下为本模块类中相关函数:北京理工大学珠海学院2009届本科生毕业设计WebWeb_MainWindo:ndowwebLoadcreateCidget()webLoadFinisheAddr();)图4-5浏览器中相关函数图本系统中调用webkit时主要的信号和槽包括:webView=newQWebView;建立一个继承QwebView类的对象;webPage=webView->page();webview对象显示页面的变量;createCentralWidget();负责建立中心页面显示窗口部件的槽;if(url.left(5)!="http:"&&url.left(5)!="file:")url.prepend("http://");webView->load(QUrl(url));负责加载网址;displayUrlAddr(constQUrl&url);负责将网址显示在窗口的urlAddr控webLoadProgress(intprogress);负责页面刷新进度显示;webLoadFinished(bool);负责判断是否刷新完网页。以下为一些主要的信号和槽的链接:connect(urlAddr,SIGNAL(returnPressed()),SLOT(loadUrlAddr()));//按回车后加载网页地址connect(webView,SIGNAL(urlChanged(constQUrl&)),this,SLOT(displayUrlAddr(constQUrl&)));//显示网页地址connect(webView,SIGNAL(loadStarted()),this,connect(webView,SIGNAL(loadProgress(int)),this,SLOT(webLoadProgress(int)));//加载进度条显示connect(webView,SIGNAL(loadFinished(bool)),this,SLOT(webLoadFinished(bool)));//网页加载成功提示createActions();QT的菜单栏的命令是由Action来定义的createCentralWidget();建立主窗口部件菜单栏中每个action都有自己的属性,以下以stopAction(停止页面刷新的动作)为例:stopAction=newQAction(tr("停止"),this);//创建stopAction并起名;stopAction->setStatusTip(tr("页面已经停止!"));//状态栏显示文字;connect(stopAction,SIGNAL(triggered()),webView,SLOT(stop()));//4.4数码相框模块设计4.4.1QT的绘图设备自身的绘图引擎,可提供在不同平台上相同的图像呈现效果,业可通过Qpicture可以记录和重放Qpainter命令的类,Qpicture是个绘图装置,您可以使用QPainter的begin()方法,指定在QPicture上进行绘图,使用end()方法結束绘图,使用QPicture的save()方法将QPainter所使用過的绘图指令存至档案。4.4.2数码相框的接口函数本系统模块支持对图片的打开,显示,缩放,旋转,全屏显示,读取U盘图片,读取蓝牙共享目录的图片等,以下为相关接口函数:publicrotateLeft();rotateRightsetAngleget:QWidudisk();bluetooth();paintEvesetPixmap();selectDir();t();next();prev();图4-6数码相框主要类及函数图qrealscale;//定义一个图片缩放值painter.rotate(angle);//为图片输入旋转角度voidsetPixmap(QStringfileName)//设置加载图像文件的方法;{pixmap.load(fileName);filename//为从文件目录中打开的图像文件名;update()//更新显示图像;voidsetAngle(qrealrotateAngle)//设置旋转图片时的旋转角度;{angle+=rotateAngle;//angleupdate()}paintEvent(QPaintEvent*event);//绘图事件;pixmap=pixmap.scaled(width(),height(),Qt::KeepAspectRatio);setAcceptDrops(true);dragEnterEvent();//拖曳输入显示事件selectDir();//选择目录文件QStringdir=QFileDialog::getExistingDirectory(this,tr("打开目”),"/mnt/yaffs/pic",QFileDialog::ShowDireSymlinks);//打开文件,将目录文件路径赋值为dir,默认目录为/mnt/yaffs/pic+imageList.at(index));//显示index++后的图片rotateLeft();//rotateRight();//左旋转,其中imageWidget->setAngle(-90);设置角度;zoomIn();//放大图片;其中imageWidget->scale*=1.25;放大值为1.25;imageWidget->resize(imageWidget->scale*scrollArea->size());//为imageWidget->resize(imageWidget->scale*scrollArea->size());//为bluetooth();//其中imageDir.setPath("/mnt/bluetooth");设置蓝牙共享目录QStringListfilterl;filter1<<"*.jpg"<<"*.bmp"<<"*.jpeg"<<"*.png"<<"*.JPG"<<"*.JPEG"<<"*.PNG";//过滤显示图片的格式;imageList=imageDir.entryList(filterl,QDir::Files);//将蓝牙目录的图片文件赋值给图片列表if((umountstatusMS_RDONLY,NULL))==0||(u"vfat",MS_RDONLY,NULL))==0)设置U盘目录;此处添加多一个U盘是否=mount("/dev/sda1","/mnt/udisk","vfat"mount_status=mount("/dev/sda","/mnt/udisk",4.4.3mount相关函数的使用*filesystemtype,unsignedlongmountflags,constvoid*data);target:文件系统所要挂在的目标目录。filesystemtype:文件系统的类型,可以是"ext2","msdos","proc","nfs",MS_NODIRATIME:不允许更新目录上的访问时间。MS_REMOUNT:重新加载文件系统。这允许你改变现存文件系统的mountflag返回说明:成功执行时,返回0。失败返回-1,errno被EBUSY:一.源文件系统已被挂上。或者不可以以只读的方式重新挂载,因为它还拥有以写方式打开的文件。二.目标处于忙状态。createActions();QT的菜单栏的命令是由Action来定义的;*toolbar;//定义一个工具栏*dirAct;//打开目录的动作*nextAct;//下一幅的动作*prevAct;//上一幅的动作*rightAct;//右转的动作*zoomInAct;//放大的动作*udiskdirAct;//U盘挂载的*bluetoothAct;//蓝牙共享的动作*presentAct;//全屏的动作QAction*closeAct;//关闭窗口的动作以下以打开动作为例创建dirAct=newQAction(QIcon(":/images/open.png"),tr("打开"),dirAct->setShortcut(Qt::Key_Asterisk);//设置快捷键connect(dirAct,SIGN//设置触发triggered()信号时,相应selectDir()槽;toolbar->addAction(dirAct);//将打开添加到工具栏中。keyPressEvent(QKeyEvent*event)//设置快捷键,当按下Key_Period时关{if(event->key()==Qt::KeyPeriod)用同样的方法可以设置全屏、放大、缩小等动作。此模块本人主要负责时间的设置,模块中创建了QspinBox来设置日历和时spinBox_dy;spinBoxdm;spinBoxdd;spinBox_th;spinBox_tm;spinBox_ts;gridLayoutWidget=newQWidget(Form);//创建一个网格到窗口From中gridLayoutWidget->setObjectName(QString:gridLayoutWidget->setGeometry(QRect(8,320,180,112));//设置网格changeButton=newQPushButton(gridLayoutWidget);//添加按钮到网格changeButton->setObjectName(QStringgridLayout->addWidget(changeButton,3,1,1,3);//设置按钮在网格的{time_tt;nowtime.tm_sec=ui.spinBox_ts->value();//设置秒,范围0-60 北京理工大学珠海学院2009届本科生毕业设计nowtime.tm_min=ui.spinBox_tm->value();//设置分,范围0-59;nowtime.tm_hour=ui.spinBox_th->value();//设置时,范围0-23;nowtime.tm_mday=ui.spinBox_dd->value();//设置日,范围1-31;nowtime.tm_mon=(ui.spinBox_dm->value())-1;//设置月,范围0-11;nowtime.tm_year=ui.spinBox_dy->value()-1900;//nowtime.tm_isdst=-1//DST.[-1/0/1];t=mktime(&nowtime)}至此,时间设置的函数已经实现,再利用一个按钮连接信号和槽:Q0bject::connect(ui.changeButton,SIGNAL(clicked()),this,SLOT(adju4.6QT自定义风格样式设计QT中提供了许多API接口可以使用Qt的绘图风格来创建自定义工具,修改界面的风格样式。le:QMotiric();pixelMetitive();rol();tPat·();re();图4-7风格样式类主要函数图在系统中,创建了一个NorwegianWoodStyle的自定义样式,它来自于QmotifStyle的QT类,在此样式中利用一些图片纹理填充了系统中大部分的控件底纹。在此风格中,利用Qpainter提供的接口函数,使GUI界面更加美观。例如:抗锯齿(获得平滑按钮边缘),alpha混合(使按钮突出或沉没),以及painterpath(以填补按钮和勾画控件)等。以下为该样式类的函数说明voidpolish(QPalette&palette);//此函数使用Qpalette调色板设置风格在函数中定义了几个默认颜色Qcolor,加载了两个PNGimages的底纹图片,利用QPixmapbackgroundImage(":/images/woodbackground.png");设置图片路slightlyOpaqueBlack);此语句设置mi当按钮按下时的半透明效果。此处还定义各个控件和文字的格式刷,以下以文本QBrushbrush=palette.background()brush.setColor(brush.color().dark());palette.setBrush(QPalette::Disabled,QPalette::WindowText,brush)palette.setBrush(QPalette::Disabled,QPalette::Button,brush);voidunpolish(QWidget*widget);//用于撤消polish的风格;intpixelMetric(PixelMetricmetric,constconstQWidget*widget)const;//该函数返回控件大小像素,以致可以控制各intstyleHint(StylQWidget*widget,QStyleHintReturn默认的返回值,使系统默认风格不可用。voiddrawPrimitive(PrimitiveElementelement,const*option,QPainter*painter,constQWidget*widget)const;/个部件的重绘,例如给按钮,spinbox框等设置圆边角,设置一些部件的半透明*option,QPainter*painter,constQWidstaticvoidsetTexture(QPalette&palette,QPalette::ColorRolerole,constQPixmap&pixmap);//此函数用于初始化部件,调用voidpolish(QPalettestaticQPainterPathroundRectPath(constQRect&rect);//此处构造一个QpainterPath,主要用于定义按钮边框,利用4个弧度和4条直线构造按钮服务端由一个Qwidget组成,其中包括一个背景label,一个聊天内容显示ListWidgetContent,一个端口编辑LineEditPort,一个连接创建按钮PushButtonCreate等。connect(PushButtonCreate,SIGNAL(clicked()),connect(server,SIGNAL(updateServer(QString,int)),this,SLOT(updateServer(QString,int)))槽updateServer(QString,int)内容包括ListWidgetContent->addItem(msg.left(length));//给ListWidgetContent聊天内容显示窗口添加内容{TcpClientSocket*tcpClientconnect(tcpClientSocket,SIGNAL(updateClients(QString,int)),this,SLOT(updateClients(QString,int)));//otDisconnected(int)));//当用户端断开连接时触发的信号和槽,对于断开连接的主要实现利用tcpClientSocketList.removeAt(i):tcpClientSocketList.append(tcpClientSocket);//添加用户到用户列}Server接收客户端聊天数据:voidTcpClientSocket::dataReceived(){while(bytesAvailable()>0){charbuf[1024];//声明字符串buf;intlength=bytesAvailable();read(buf,length);//读取buf中字符内容;QStringmsg=buf;//将读取的内容赋给msg信号内容emitupdateClients(msg,length);//更新显示客户端聊天数}4.7.2客户端设计本客户端由由一个Qwidget组成,其中包括背景label,聊天内容显示ListWidgetContent,聊天内容编辑栏LineEditSend,端口编辑LineEditPort,IP编辑栏LineEditServerIP,连接进入按钮PushButtonEnter,发送聊天内容其中主要的信号和槽有:connect(PushButtonEnter,SIGNAL(clicked()),this,SLOT(slotEnter()));connect(PushButtonSend,SIGNAL(clicked()),this,SLOT(slotSend()));QStringip=LineEditServerIP->text();//将IP编辑栏的内容赋值给ip;userName=LineEditUser->text();//将用户名编辑栏内容赋值给usrname;tcpSocket=newQTcpSocket(this);//创建一个tcp套接字对象,即新用connect(tcpSocket,SIGNAL(connected()),this,SLOT(slotConnected()))//用户连接的信号和槽;connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(slotDisconneed()));//用户断开连接的信号和槽;connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));//数据发送的的信号和槽;tcpSocket->connectToHost(*serverIP,port);//根据IP和端口号连接client客户端数据接收:voidTcpClient::dataReceived(){while(tcpSocket->bytesAvailable()>0){QByteArraydatagram;//声明一个字节数组;datagramdatagram.resize(tcpSocket->bytesAvailable());//设置字节数QHostAddresssender;//tcpSocket->read(datagram.data(),datagram.size());//读取字节数组的数据;QStringmsg=datagram.data();//将数据赋值给msg,此处与服务端的msg等价;ListWidgetContent->addItem(msg.left(datagram.size()));//添加msg内容到ListWidgetContent聊天显示栏;}4.8Tslib与触摸屏触摸屏按其工作原理的不同分为表面声波屏、电容屏、电阻屏和红外屏几种。常见的又数电阻触摸屏。如图所示,电阻触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。ElectrodeElectrodeY1如下图所示,当手指或笔触摸屏幕时(图c),平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层(顶层)接通X轴方向的5V均匀电压场(图a),使得检测层(底层)的电压由零变为非零,控制器侦测到这个接通后,进行A/D转换,并将得到的电压值与5V相比即可得触摸点的X轴坐标为(原点在靠近接地点的那端):Xi=Lx*Vi/V(即分压原理)同理得出Y轴的坐标,这就是所有电阻触摸屏共同的最基本原理。(OFFSTATE)(ON(OFFSTATE)图4-9触摸屏坐标识别原理图本开发触摸屏是基于UCB1400的芯片,UCB1400是一款特殊的芯片,其主要功能是用作立体式音频解码器,另外它还有触摸屏接口和电源管理接口。在我们的开发板上主要用作XscaleAC处理单元的接口电路和触摸屏的数模转换电路。触摸屏接口可直接连接四线制触摸屏。其内建10位A/D转换,提供读取触摸屏和电源管理参数的能力。10个通用I/0引脚可向系统提供可编程输入输出。1.先解压tslib-1.4.tar.gz包。2.指定交叉编译工具$exportCC=arm-linux-gcc4.编译TsLib:Make和makeinstall5.由此可得经过交叉编译的TsLibTsLib的相关配置1.把编译出TsLib上的/bin,/etc,/lib目录下的文件都拷贝到开发板下。2.打开/mnt/yaffs/Lian/tslib1.4/etc/ts.conf文件,删去该文件下的所有内容后加入一下内容:#module_rawinputmodulepthrespmin=1modulevariancedelta=30moduledejitterdelta=100modulelinearmodulelinear3.设置tslib环境变量:exportVR0OT=/mnt/yaffs/Lian/tslib1.4//tslib1.4目录exportTSLIBCONSOLEDEVICE=none//none默认是/dev/ttyexportTSLIB_TSDEVICE=/dev/touchpanel//触摸屏设备节点exportTSLIBCALIBFILE=$V_ROOT/etc/pointercal//指定触摸屏校准文件pintercal的存放位置exportTSLIB_CONFFILE=$V_ROOT/etc/ts.conf//tslib模块配置文件exportTSLIB_PLUGINDIR=$V_ROOT/lib/ts//tslib插件库目录exportQWS_MOUSE_PROTO=Tslib:/dev/touchpanel//触摸屏设备文件exportLD_LIBRARY_PATH=/tmp:$V_ROOT/lib:$LD_LIBRARY_PATH//库文件4.运行/mnt/yaffs/Li/etc/pointercal;再运行./mnt/yaffs/Lian/tslib1.4/bin/ts_test检测一下校正结果,如果touch的时候,十字光标随着你移动,基本成功了。至此Tslib可以测试通过,此后在此环境变量下所运行的QT程序都可以利用触摸屏。本章详述了每个软件模块的详细设计,包括主界面的设计,Mplayer在QT中的调用,Webkit引擎的调用和实现,介绍了QT的绘图设备,自定义风格的设计,同时也详述了每个模块的GUI设计以及模块中所用到的类和实现方法。此外,还介绍了基于Tslib的触摸屏实现和触摸屏的相关配置等。5.1Linux内核裁剪与烧写makegconfig或makemenuconfig2.使得目标平台上能够使用usb鼠标,修改如下:EHCIHCD(去掉)USBMassStorageWrite-ProtectedMediaDetection(EXPERIMENTAL)(去掉)4.添加蓝牙模块(此处作为外部模块)选择Networkingsupport选项,进入BluetoothsubsystemsupportBluetoothdevicedrivers>net/bluetooth/bnep/bnep.ko,net/bluetooth/12cap.kodrivers/bluetooth/hci_usb.ko放入开发板,在加载这些模块后可以/etc/init.d/bluetoothstarthciconfighci0up5.选择好选项后,保存并退出makemenuconfig。执行以下命令:makeclean//删除上次编译产生的文件生成的二进制文件为zImage存储在./arch/arm/boot/zImage。把生成的zImage文件拷贝到PC机的tftp服务目录/tftpboot/下,再启/etc/init.d/bluetoothstartifconfigbnep05//此处设置蓝牙BluetoothUSB适配器的IP地址(此地址根据另外配对的BluetoothUSB适配器IP地址设tar-vxzfqt-embedded-linux-opensource-src-4.4.0-rcl.tar.gz得到QTE源码4.配置我们要得到的QTE:./configure-embeddedarm-qt-kbd-usb-no-phonon-prefix/qt1005-shared-fast-pch-no-qt3support-nomaketools-qt-mouse-tslib-qt-mouse-linuxtp-qt-mouse-linuxtp支持LinuxTp的鼠标协议;-nomakeexamples-nomakedemos不编译examples和demos-qt-mouse-tslib添加Tslib触摸屏协议支持;(更多选项可用./configure--help查看)6.等待编译。(此过程时间较长)8.得到我们编译后的QTE,如新的QTE目录/qt10055.3交叉编译与环境配置exportQTDIR=/qt1005exportLDLIBRARY_PATH=/qt1005/lib5.得到开发板上的可执行文件test081005015.4移植运行库和字体库mkdir/qt1005///创建目录mkdir/qt1005/pluginsmkdir/qt1005/plugins/imageformats/mkdir/qt1005/libmkdir/qt1005/lib/fontsmount/mnt/udisk;//挂载U盘cp/mnt/udisk/libqjpeg.so/qt1005/plugins/imageformats/cp/mnt/udisk/libqgif.so/qt1005/plugins/imageformats/cp/m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实践案例分析营养师试题及答案
- 2025年房地产经纪人新规试题及答案
- 读《工作法》读后感300字
- 西安英语中考题及答案
- 吉林省辉南县重点达标名校2024年中考适应性考试数学试题含解析
- 阳康门诊面试题及答案
- 江西省赣州市寻乌县博豪中学2024-2025学年高二下学期第一次阶段性检测语文答案
- 福建省师范大学附中2025届高三英语试题查缺补漏试题含解析
- 西北大学现代学院《结构基础》2023-2024学年第二学期期末试卷
- 湛江市重点中学2025届高三5月高三调研测试物理试题含解析
- 水准测量习题
- 成人体外膜肺氧合患者院内转运护理共识
- 天策科技50t年高性能沥青基碳纤维产业化项目环境影响报告书
- 云贵高原和四川盆地
- JJF 1169-2007汽车制动操纵力计校准规范
- GB/T 37136-2018电力用户供配电设施运行维护规范
- GB/T 25317-2010绝缘子串元件的槽型连接尺寸
- GB/T 210.1-2004工业碳酸钠及其试验方法第1部分:工业碳酸钠
- GB/T 19587-2017气体吸附BET法测定固态物质比表面积
- 电气安全风险辨识清单
- FZ/T 97021-2009电脑织袜机
评论
0/150
提交评论