基于qt的校园导航系统的设计与实现_第1页
基于qt的校园导航系统的设计与实现_第2页
基于qt的校园导航系统的设计与实现_第3页
基于qt的校园导航系统的设计与实现_第4页
基于qt的校园导航系统的设计与实现_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于QT的校园导航系统的设计与实现摘要本文主要是介绍利用LINUX系统和QT制作校园导航系统的设计方法。使用的操作系统是LINUX系统,但是在WINDOWS系统下也是可以使用的,所使用的语言是C,开发工具是QT。设计的主要目的是能够简单地观看整个校园的风景,使不熟悉校园的人能够知道每个景点的位置、介绍,查看学校的建筑物,包括建筑物的图片以及建筑物的描述。尤其,这个系统可以找出两个建筑物之间最短的距离,从而迅速地帮助不熟悉校园的人了解整个校园环境,然后找到最好的方法去参观整个校园,除此之外,该系统还可以查询两个景点之间的所有路径,有助于来往者跟好的选择路径。导航系统是在LINUX系统(LINUX下开发,WINDOWS下也可以运行)下,先利用QT制作出用户界面,再利用C编程语言设计出基本功能并与界面相结合。本文设计的导航系统能够实现以下三大功能第一,它可以测量两个建筑物之间的距离,同时在查询两个景点之间的路径信息的同时,提供起始点与终点建筑物的图片信息,便于更好的确认;第二,它可以帮助来访者从众多的路线中选出最短的一条,同时会提供两点之间的所有路径;第三,它可以在标志性建筑添加一些描述信息和图片,还可以查看从该建筑物到所有其他建筑物的路径信息。关键词路径规划;最短路径算法;校园导航;QTTHESCHOOLNAVIGATESYSTEMBASEDONLINUXANDQTCREATORABSTRACTMAINLYINTRODUCEDINTHISPAPERUSINGTHELINUXSYSTEMANDQTCAMPUSNAVIGATIONSYSTEMDESIGNMETHODUSEOFTHEOPERATINGSYSTEMISLINUXSYSTEM,BUTALSOCANUSEUNDERWINDOWSSYSTEM,THELANGUAGEISUSEDBYC,DEVELOPMENTTOOLSISQTTHEMAINPURPOSEOFDESIGNISTOBEABLETOSIMPLYWATCHTHESCENERYOFTHEWHOLECAMPUS,WHOISFAMILIARWITHTHECAMPUSCANKNOWTHELOCATIONOFEACHSCENICSPOT,INTRODUCTION,SEETHESCHOOLBUILDINGS,INCLUDINGTHESTRUCTUREOFTHEPICTURESANDTHEDESCRIPTIONOFTHEBUILDINGESPECIALLY,THESYSTEMCANFINDOUTTHESHORTESTDISTANCEBETWEENTWOBUILDINGS,SOASTOHELPPEOPLEWHOARENOTFAMILIARWITHTHECAMPUSRAPIDLYUNDERSTANDTHECAMPUSENVIRONMENT,ANDFINDTHEBESTWAYTOVISITTHEWHOLECAMPUS,INADDITION,THESYSTEMCANALSOQUERYALLPATHSBETWEENTWOSPOTS,HELPGOINGBACKANDFORTHWITHGOODCHOICEPATHNAVIGATIONSYSTEMISINTHELINUXSYSTEMUNDERLINUXDEVELOPMENT,ALSOCANRUNUNDERWINDOWS,THEFIRSTUSERPRODUCEDUSINGQT,USINGCPROGRAMMINGLANGUAGEBASICDESIGNFUNCTIONANDCOMBININGWITHTHEINTERFACETHENAVIGATIONSYSTEMISDESIGNEDINTHISPAPERCANACHIEVETHEFOLLOWINGTHREEFUNCTIONSFIRST,ITCANMEASURETHEDISTANCEBETWEENTHETWOBUILDINGS,ATTHESAMETIMETHEQUERYPATHINFORMATIONBETWEENTWOSITESATTHESAMETIME,PROVIDETHEPICTUREOFTHESTARTINGPOINTANDENDPOINTBUILDINGINFORMATION,TOFACILITATEBETTERCONFIRMATIONSECOND,ITCANHELPVISITORSFROMMANYCHOOSETHESHORTESTROUTE,ATTHESAMETIMEWILLPROVIDEALLTHEPATHBETWEENTWOPOINTSTHIRD,ITCANADDSOMEDESCRIPTIONINLANDMARKINFORMATIONANDPICTURES,YOUCANALSOVIEWFROMTHEBUILDINGTOALLTHEOTHERPATHINFORMATIONOFTHEBUILDINGKEYWORDSPATHPLANNINGANTALGORITHMTHECAMPUSNAVIGATIONQT目录摘要IABSTRACTII1绪论111概述112研究背景113研究目标114本章小结12QT简介221QT的背景介绍222QT实现的结构原理223QTQWIDGET简介3231详细描述3232QWIDGET事件简介424QT应用程序的实现625本章小结73需求分析831需求分析概述832需求分析的特点833需求分析需要完成的任务834实际需求分析9341用户需求分析9342功能需求分析9343实际需求分析9344系统性能需求分析935本章小结104总体设计1141总体设计概述1142系统总体设计描述1143系统总体设计模块划分11431主要模块划分图12432显示系统主界面模块设计12433查询导航有关人员模块设计13434导航主界面的模块的设计1344本章总结145详细设计1551详细设计概述1552校园导航系统主程序流程图1553单源最短路径算法介绍16531DIJKSTRA迪杰斯特拉算法16532FLOYED弗洛耶德算法1754图中节点与路径的存储19541节点的存储19542节点间路径长度的存储19543整个图的存储2055本章总结206系统实现及运行结果2161界面设计21611主窗体设计21612子页面布局设计24613更换起始点的实现27614点击主页面中的查询路径具体实现29615点击查看景点信息描述的实现2962图的创建3163路径查询的具体实现31631单源最短路径算法具体实现32632所有可达路径的查询的具体实现33633每一个点到它可达的所有点的查询的具体实现3364选择系统是否退出的具体实现3465本章小结357测试3671测试目标3672测试预期结果3673测试用例的设计3674本章小结38结论39参考文献40致谢41外文原文42中文翻译471绪论11概述现在科技越来越发达,手机上的软件,电脑上的软件越来越多,所以开发小的程序也越来越有必要。QT具备跨平台,易扩展,界面华丽,性能稳定等优点。因此,以嵌入式处理器作为硬件平台,以QT作为程序框架,两者的完美结合必将成为未来技术的发展方向。12研究背景现在,汽车正在普及,道路不断建设,城际间的经济往来更加频繁,活动的区域也越来越大。为了提高生活质量,大量的休闲活动、探险活动的举行使我们并不局限在自己认识的一小块区域中,不认识道路,找不到目的地的情况也屡有发生。就此,各种各样的导航仪逐渐走进我们的生活。无论什么导航仪最主要的部分都是电子地图。开发电子地图成为了导航仪的关键。根据调查,电子地图制作困难而且价格相当昂贵,给导航仪的开发带来了很多不便。自主绘制电子地图,编写电子地图应用程序,不管是从经济上还是研究上都具有非常大的意义。现在,各个学校都有了自己的导航系统,但是开发工具语言,还有平台不一样。所以,如果拥有一个跨平台的程序的话,那将会给我们的开发节省了大量的时间。QT正是一个支持多平台的C图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。QT是完全面向对象的很容易扩展,并且允许真正地组件编程。所以使用QT作为应用程序框架是一个不错的选择。13研究目标本课题名为校园地理信息系统。本系统以太原理工大学为模型,旨在建立一个本学校的导航系统,可以根据不同人的要求,足不出户,就可以浏览校园,得到各种信息基于上述背景,开发一个校园导航项目,使用LINUX搭配QT来构建这个项目。利用QT4作为系统应用层的程序框架。开发一个可以运行的小客户端。这个客户端虽然是在LINUX下开发的,但是它是可移植的,在WINDOWS下也可以运行。14本章小结本章主要介绍本项目的选题背景、意义,选题目标。通过介绍,了解当今社会主要是校园,导航系统的需求以及重要性,明白研究该系统的必要性。2QT简介21QT的背景介绍QT是一个1991年由奇趣科技开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。QT是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器METAOBJECTCOMPILER,MOC)以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,QT被DIGIA收购。2014年4月,跨平台集成开发环境QTCREATOR310正式发布,实现了对于IOS的完全支持,新增WINRT、BEAUTIFIER等插件,废弃了无PYTHON接口的GDB调试支持,集成了基于CLANG的C/C代码模块,并对ANDROID支持做出了调整,至此实现了全面支持IOS、ANDROID、WP。QTCREATOR包含了一套用于创建和测试基于QT应用程序的高效工具,包括一个高级的C代码编辑器上下文感知帮助系统可视化调试器源代码管理项目和构建管理工具优良的跨平台特性QT支持下列操作系统MICROSOFTWINDOWS95/98,MICROSOFTWINDOWSNT,LINUX,SOLARIS,SUNOS,HPUX,DIGITALUNIXOSF/1,TRU64,IRIX,FREEBSD,BSD/OS,SCO,AIX,OS390,QNX等等。面向对象QT的良好封装机制使得QT的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。QT提供了一种称为SIGNALS/SLOTS的安全类型来替代CALLBACK,这使得各个元件之间的协同工作变得十分简单。22QT实现的结构原理QT/EMBEDDED是TROLLTECH公司开发的面向嵌入式系统的QT版本,与X11版本的QT在最大程度上接口兼容,采用帧缓存(FRAMEBUFFER)作为底层图形接口。QT/EMBEDDED类库完全采用C封装,并且有着丰富的控件资源以及较好的可移植性,大范围的QT/EMBEDDEDAPI可用于多种开发项目。QT/EMBEDDED的实现结构如图21所示图21QT的实现结构图QT/EMBEDDED的底层图形引擎基于FRAMEBUFFER。FRAMEBUFFER驱动程序的实现分为两个方面一方面是对LCD及其相关部分的初始化,包括画在缓冲区的创建和对DMA通道的设置;另外一方面是对画面缓冲区的读写,具体到代码为READ、WRITE、LSEEK等系统调用接口。至于将画面缓冲区的内容输出到LCD显示屏上,则由硬件自动完成。对于软件来说是透明的。当对于DMA通道和画面缓冲区设置完成后,DMA开始正常工作,并将缓冲区中的内容不断发送到LCD上。这个过程是基于DMA对于LCD的不断刷新的。基于该特性,FRAMEBUFFER驱动程序必须将画面缓冲区的存储空间(物理空间)重新映射到一个不加高缓存和写缓存的虚拟地址区间中,这样能才保证应用程序通过MMAP将该缓存映射到用户空间后,对于该画面缓存的写操作能够实时的体现在LCD上。QT程序是基于C编写的,图形用户界面编程同时需要运行效率和高水平的灵活性。QT通过结合C的速度为这一领域提供了QT对象模型。QT把下面这些特性添加到了C当中一种被称为信号和槽的非常强大的机制;可查询和可设计的属性项;强大的事件和事件过滤器;根据上下文进行国际化的字符串翻译;完善的时间间隔驱动的计时器等。许多QT的特性是基于QOBJECT的继承,通过标准C技术实现的。QAPPLICATION是必须构造的QT主对象,需要在一开始的时候就构造这个对象,并把命令行参数传递给这个对象,每个QT应用程序有且仅有一个QAPPLICATION对象,该对象必须在做其他事之前创建,这个对象处理一些底层操作,如事件处理、字符串本地化和控制界面外观等。信号和信号处理函数是GUI应用程序用来响应用户输入的基本机制,也是所有GUI库的核心特征,QT的信号处理机制由信号SIGNAL和槽SLOT构成,它们相当于GTK中的信号和回调函数。在QT中回调函数就叫做槽。信号和槽用于对象间的通讯,它的基本语法为CONNECTOBJECT1,SIGNAL1,OBJECT2,SLOT123QTQWIDGET简介231详细描述QWIDGET类是所有用户界面对象的基类。通俗的来讲,基本上所有的UI类都是由QWIDGETQT继承出来的,而QWIDGET继承于QOBJECT,大家可以查阅QTSOURCE即可发现一些微妙的写法,如这篇文章有详细介绍QT库对象数据的声明和使用窗口层次窗口部件是用户界面的一个原子它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。QDIALOG是最普通的顶级窗口。不被嵌入到一个父窗口部件的窗口部件被叫做顶级窗口部件。通常情况下,顶级窗口部件是有框架和标题栏的窗口(尽管如果使用了一定的窗口部件标记,创建顶级窗口部件时也可能没有这些装饰。)在QT中,QMAINWINDOW和和不同的QDIALOG的子类是最普通的顶级窗口。一个没有父窗口部件的窗口部件一直是顶级窗口部件。非顶级窗口部件是子窗口部件。它们是它们的父窗口部件中的子窗口。你通常不能在视觉角度从它们的父窗口部件中辨别一个子窗口部件。在QT中的绝大多数其它窗口部件仅仅作为子窗口部件才是有用的。(当然把一个按钮作为或者叫做顶级窗口部件也是可能的,但绝大多数人喜欢把他们的按钮放到其它按钮当中,比如QDIALOG。)QWIDGET有很多成员函数,但是它们中的一些有少量的直接功能例如,QWIDGET有一个字体属性,但是它自己从来不用。有很多继承它的子类提供了实际的功能,比如QPUSHBUTTON、QLISTBOX和QTABDIALOG等等。每一个窗口部件构造函数接受一个或两个标准参数1QWIDGETPARENT0是新窗口部件的父窗口部件。如果为0(默认),新的窗口部件将是一个顶级窗口部件。如果不是,它将会使PARENT的一个孩子,并且被PARENT的几何形状所强迫(除非你指定WTYPE_TOPLEVEL作为窗口部件标记)。232QWIDGET事件简介基本事件PAINTEVENT只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现它并且不在PAINTEVENT之外在屏幕上绘制是明智的。RESIZEEVENT当窗口部件被重新定义大小时被调用。MOUSEPRESSEVENT当鼠标键被按下时被调用。有六个鼠标相关事件,但是鼠标按下和鼠标释放事件是到目前为止最重要的。当鼠标在窗口部件内或者当它使用GRABMOUSE来捕获鼠标时,它接收鼠标按下事件。MOUSERELEASEEVENT当鼠标键被释放时被调用。当窗口部件已经接收相应的鼠标按下事件时,它接收鼠标释放事件。这也就是说如果用户在你的窗口部件内按下鼠标,然后拖着鼠标到其它某个地方,然后释放,你的窗口部件接收这个释放事件。这里有一个例外如果出现在弹出菜单中,当鼠标键被按下时,这个弹出菜单立即会偷掉这个鼠标事件。MOUSEDOUBLECLICKEVENT和它看起来也许不太一样。如果用户双击,窗口部件接收一个鼠标按下事件(如果他们没有拿牢鼠标,也许会出现一个或两个鼠标移动事件)、一个鼠标释放事件并且最终是这个事件。直到你看到第二次点击是否到来之前,不能从一个双击中辨别一个点击。(这是为什么绝大多数图形用户界面图书建议双击是单击的一个扩展,而不是一个不同行为的触发的一个原因。)如果你的窗口部件仅仅包含子窗口部件,你也许不需要实现任何一个事件处理器。如果你想检测在子窗口部件中的鼠标点击,请在父窗口部件的MOUSEPRESSEVENT中调用子窗口部件的HASMOUSE函数。接收键盘的窗口部件需要重新实现一些更多的事件处理器KEYPRESSEVENT只要键被按下和当键已经被按下足够长的时间可以自动重复了就被调用。注意如果TAB和SHIFTTAB键被用在焦点变换机制中,它们仅仅被传递给窗口部件。为了强迫那些键被你的窗口部件处理,你必须重新实现QWIDGETEVENT。FOCUSINEVENT当窗口部件获得键盘焦点(假设你已经调用SETFOCUSPOLICY)时被调用。写得好的窗口部件意味着它们能按照一种清晰但谨慎的方式来获得键盘焦点。FOCUSOUTEVENT当窗口部件失去键盘焦点时被调用。一些窗口部件也许需要实现一些不太普通的事件处理器MOUSEMOVEEVENT只要当鼠标键被按下时鼠标移动就会被调用。举例来说,对于拖动,这个很有用。如果你调用SETMOUSETRACKINGTRUE,尽管没有鼠标键被按下,你也会获得鼠标移动事件。(注意这个使用鼠标跟踪的应用程序在低下的X连接下不是很有用。(也可以)参考拖放信息。KEYRELEASEEVENT只要键被释放和当如果这个键是自动重复的并且被按下一段时间时就被调用。在这种情况下窗口部件接收一个键释放事件并且对于每一个重复立即有一个键按下事件。注意如果TAB和SHIFTTAB键被用在焦点变换机制中,它们仅仅被传递给窗口部件。为了强迫那些键被你的窗口部件处理,你必须重新实现QWIDGETEVENT。WHEELEVENT当窗口部件拥有焦点时,只要用户转动鼠标滚轮就被调用。ENTEREVENT当鼠标进入这个窗口部件屏幕空间时被调用。LEAVEEVENT当鼠标离开这个窗口部件的屏幕空间时被调用。MOVEEVENT当窗口部件相对于它的父窗口部件已经被移动时被调用。CLOSEEVENT当用户关闭窗口部件时(或这当CLOSE被调用时)被调用。这里还有一些不太明显的事件。它们在QEVENTH中被列出并且你需要重新实现EVENT来处理它们。EVENT的默认实现处理TAB和SHIFTTAB(移动键盘焦点)并且其它绝大多数事件给上面提到的一个或更多的特定处理器。WINDOWFLAG标识关于QWIDGET的FLAG的介绍ENUMQTWINDOWTYPEFLAGSQTWINDOWFLAGS这两个参数参阅官方文档。QT的WINDOWFLAGS有很多,实际使用时,若不关心窗口层次的话,大可不比太关心这个。比如说在WINDOW上做应用开发,大可只关注QTDIALOG,QTTOOL,QTWINDOW即可。但若是做嵌入式开发就得好好看看这个属性,整理好这部分属性,有利于窗口管理。着重介绍几个重要成员函数BOOLQWIDGETCLOSESLOT关闭这个窗口部件。如果窗口部件被关闭,返回真,否则返回假。首先它发送给这个窗口部件一个QCLOSEEVENT。如果它接收这个关闭事件,它就被隐藏了。QWIDGETCLOSEEVENT的默认实现是接收这个关闭事件。当最后一个可视的顶级窗口部件被关闭,QAPPLICATIONLASTWINDOWCLOSED信号被发射。注意窗口的ENUMQTWIDGETATTRIBUTE属性,窗口默认属性是QTWA_MACOPAQUESIZEGRIP,设置上这个属性意味着窗口调用CLOSE只销毁了UI想关,QWIDGET内还有很多内存空间没有释放,需调用DELETE销毁QWIDGET。若需要在调用CLOSE时一并销毁窗口可以给窗口设置QTWA_DELETEONCLOSE属性。BOOLQWIDGETEVENTQEVENTE虚保护这是主事件处理器,它处理事件E。你可以在子类中被重新实现整个函数,但是我们建议你使用一个特定的事件处理器来替代它。主事件首先把事件传递给所有已经被安装的事件过滤器。如果没有过滤器中途截取这个事件,它调用一个特定的事件处理器。键按下和释放事件被处理得和其它事件不同。EVENT检查TAB和SHIFTTAB并且试图适当地移动焦点。如果没有窗口部件被焦点移入(或者键按下不是TAB或SHIFTTAB),EVENT调用KEYPRESSEVENT。如果它能够把一个事件传递给没个东西,这个函数就返回真,否则如果没有任何东西想要这个事件,返回假。也可以参考CLOSEEVENT、FOCUSINEVENT、FOCUSOUTEVENT、ENTEREVENT、KEYPRESSEVENT、KEYRELEASEEVENT、LEAVEEVENT、MOUSEDOUBLECLICKEVENT、MOUSEMOVEEVENT、MOUSEPRESSEVENT、MOUSERELEASEEVENT、MOVEEVENT、PAINTEVENT、RESIZEEVENT、QOBJECTEVENT和QOBJECTTIMEREVENT。VOIDQWIDGETPAINTEVENTQPAINTEVENT虚保护这个事件处理器可以在子类中被重新实现来接收绘制事件。绘制事件就是重新绘制这个窗口部件的所有部分的一个请求。它可以是REPAINT或UPDATE的结果,或者因为这个窗口部件原来被变暗并且现在已经不再被覆盖了,或者其它很多原因。很多窗口部件在当它们被请求时,它们很简单地重新绘制整个界面,但是一些比较慢的窗口部件需要通过仅仅绘制被请求的区域QPAINTEVENTREGION进行优化。这个速度优化不会改变结果,在事件处理过程中,绘制仅仅发生在被改变的区域中。例如,QLISTVIEW和QCANVAS就是这样做的。QT也试图通过把多个绘制事件合并为一个来加快绘制速度。UPDATE被调用几次或者窗口当系统发送几次绘制事件,QT把它们合并为一个比较大区域(请参考QREGIONUNITE)的一个事件中。REPAINT不允许这样优化,所以只要可能我们建议使用UPDATE。当绘制事件发生,更新区域通常被擦除,所以你正在这个窗口部件的背景上绘制。这里有一些例外并且QPAINTEVENTERASED告诉你这个窗口部件是否被擦除。背景可以通过使用SETBACKGROUNDMODE、SETPALETTEBACKGROUNDCOLOR或SETBACKGROUNDPIXMAP来设置。SETBACKGROUNDMODE的文档详细描述了背景,我们建议你去读一下。VOIDQWIDGETRAISE槽把这个窗口部件升高到它的父窗口部件的栈的顶部。如果在屏幕上有与这个窗口部件重叠的兄弟,这个窗口部件将在它后来的这些兄弟之前变的可视了。也可以参考LOWER和STACKUNDER。VOIDQWIDGETREPAINTINTX,INTY,INTW,INTH,BOOLERASETRUE槽通过立即调用PAINTEVENT来直接重新绘制窗口部件,除非更新是失效的或者窗口部件被隐藏。如果ERASE为真,QT在PAINTEVENT调用之前擦除区域X,Y,W,H。如果W是负数,它被WIDTHX替换,并且如果H是负数,它被HEIGHTY替换。如果你需要立即重新绘制,我们建议使用REPAINT,比如在动画期间。在绝大多数情况下,UPDATE更好,因为它允许QT来优化速度并且防止闪烁。警告如果你在一个函数中调用REPAINT,而它自己又被PAINTEVENT调用,你也许会看到无线循环。UPDATE函数从来不会产生循环。也可以参考UPDATE、PAINTEVENT、UPDATESENABLED和ERASE。24QT应用程序的实现由以上简介可知,QT是一个创建GUI程序的C类库,编写QT应用程序的主要工作是基于已有的QT类编写用户类。QT提供了一组范围相当广泛的C类库,并包含了几种命令行和图形界面的工具,有效地使用这些工具可以加速开发过程。QTDESIGNERQT设计器。用来可视化地设计应用程序界面。QTLINGUISTQT语言学家。用来翻译应用程序。以此提供对多种语言的支持。QMAKE使用此工具可以由简单的、与平台无关的工程文件来生成编译所需的MAKEFILE。QTASSISTANT关于QT的帮助文件。类似于MSDN。可以快速地发现你所需要的帮助。MOC元对象编译器。UIC用户界面编译器。在程序编译时被自动调用,通过UI_H文件生成应用程序界面。QT应用程序的设计使用基于工程的方法,并通过PRO文件进行工程管理。实现应用程序的第一步是编写PRO文件,然后使用QT4自带的QMAKE工具生成MAKEFILE,最后进行源代码的编译。QMAKE的过程如下QMAKEPROJECT/生成PRO的工程文件QMAKE/生成MAKEFILENMAKE/编译25本章小结随着越来越多的第三方软件公司利用QT/EMBEDDED开发嵌入式LINUX下的应用软件,QT的应用已经越来越广泛。本章主要介绍了QT的背景和描述了QT实现的结构原理,还简述了QT的相关特性。此外,也介绍了QT应用程序开发时的相关工具。3需求分析31需求分析概述在系统工程及软件工程中,需求分析指的是在创建一个新的或改变一个现存的系统或产品时,确定新系统的目的、范围、定义和功能时所要做的所有工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个过程中最关键的一个过程。假如在需求分析时,分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。32需求分析的特点需求分析是一项重要的工作,也是最困难的工作。该阶段工作有以下特点(1)用户与开发人员很难进行交流在软件生存周期中,其它四个阶段都是面向软件技术问题,只有本阶段是面向用户的。需求分析是对用户的业务活动进行分析,明确在用户的业务环境中软件系统应该“做什么“。但是在开始时,开发人员和用户双方都不能准确地提出系统要“做什么“。因为软件开发人员不是用户问题领域的专家,不熟悉用户的业务活动和业务环境,又不可能在短期内搞清楚;而用户不熟悉计算机应用的有关问题。由于双方互相不了解对方的工作,又缺乏共同语言,所以在交流时存在着隔阂。(2)用户的需求是动态变化的对于一个大型而复杂的软件系统,用户很难精确完整地提出它的功能和性能要求。一开始只能提出一个大概、模糊的功能,只有经过长时间的反复认识才逐步明确。有时进入到设计、编程阶段才能明确,更有甚者,到开发后期还在提新的要求。这无疑给软件开发带来困难。(3)系统变更的代价呈非线性增长需求分析是软件开发的基础。假定在该阶段发现一个错误,解决它需要用一小时的时间,到设计、编程、测试和维护阶段解决,则要花25、5、25、100倍的时间。因此,对于大型复杂系统而言,首先要进行可行性研究。开发人员对用户的要求及现实环境进行调查、了解,从技术、经济和社会因素三个方面进行研究并论证该软件项目的可行性,根据可行性研究的结果,决定项目的取舍。33需求分析需要完成的任务虽然功能需求是对软件系统的一项基本需求,但却并不是唯一的需求,通常对软件系统有下述几方面的综合要求。1功能需求2性能需求3可靠性和可用性需求4出错处理需求5接口需求6约束7逆向需求8将来可能提出的要求34实际需求分析341用户需求分析目前,我们可以通过各种途径接触校园导航,例如以网页形式的电子地图,如GOOGLE地图、GOOGLEEARTH、百度地图等,以车载GPS导航仪的电子地图,如GARMIN任我游、纽曼、新科、城际通等,还有以手机导航功能出现的电子地图,越来越多的手机将支持导航功能,诺基亚2010年在大规模普及手机导航。对此,本项目采用免费版的QT4作为程序框架,并且可以跨平台使用,在开发成本上有着很大的优势。未来几年,配备电子地图的电子产品市场将逐渐走向成熟,市场需求和产品销量会保持大幅增长,产品供应链中的各类企业将获得巨大商机。尤其是随着产品价格的不断下降,这种快速发展的态势会愈加明显。电子地图在中国市场必然会获得更大的发展空间。由此,本项目也适应用户需求,开发校园导航的相关功能景点信息显示、最短路径查找等。342功能需求分析根据用户需求,和对产品的定位,划分以下功能(1)设计太原理工大学的校园平面图,所含景点不少于5个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等信息。(2)为来访客人提供图中任意景点相关信息的查询。(3)为来访客人提供图中任意景点的问路查询,即查询任意两个顶点之间的一条最短的简单路径。343实际需求分析1从我们学校的地图任意选取了9个景点,并给它们的距离赋值2本程序为用户提供了各种各样的查询信息,各种查询都可以任意选择从代号或名称,选择时的任意错误都有做处理。本题抽象看成一个无向带权图。图的结点代表景点,边代表路径。(1)任意一个景点的相关信息。(2)任意两个景点间的最短路径并输出了这条路径的路线。支持功能分析(1)设计太原理工大学的校园平面图,所含景点不少于5个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等信息。(2)为来访客人提供图中任意景点相关信息的查询,主要包括景点图片的观看,景点描述信息的阅读,景点到校园内所有景点的可达路径的了解。(3)为来访客人提供图中任意景点的问路查询,即查询任意两个顶点之间的一条最短的简单路径,以及两点间任意344系统性能需求分析对于该系统,没有严格的性能要求。1首先,在没有选择初始点与终点是,系统不能够崩溃,当点击查询按钮是,不会没有结果显示,导致程序不是很美观,要求系统在初始时,有相应的结果显示。2其次,可以允许运行多个界面,以防用户需要进行路径、景点、还有风景的比较,以便选择更好的参观方式。35本章小结本章主要介绍了校园导航系统的需求分析,通过了解用户的需求分析,来制定功能的需求分析,在通过功能的需求分析,来制定实际需求分析,以此为基础进行导航系统的设计。4总体设计41总体设计概述总体设计概述这个阶段必须回答的关键问题是“概括地说,应该如何解决这个问题首先,应该考虑几种可能的解决方案。列如,目标系统的一些主要功能是用计算机自动完成还是用人工完成;如果使用计算机,那么是使用批处理方式还是人机交互方式;信息存储使用传统的文件系统还是数据库。通常至少应该考虑下述几类可能的方案1低成本的解决方案。系统只能完成最必要的工作,不能多做一点额处的工作,只要能完成用户需要的功能就可以了。2中等成本的解决方案。这样的系统不仅能够很好地完成预定的任务,使用起来很方便,而且可能还具有用户没有具体指定的某些功能和特点。虽然用户没有提出这些具体要求,但是系统分析员根据自己的知识和经验断定,这些附加的能力在实践中将证明是很有价值的。3高成本的“十全十美”的系统。这样的系统具有用户可能希望有的所有功能和特点。系统分析员应该使用系统流程图或其他工具描述每种可能的系统,估计每种方案的成本和效益,还应该在充分权衡各种方案的利弊的基础上,推荐一个较好的系统最佳方案,并且制定实现所推荐的系统的详细计划。如果用户接受分析员推荐的系统,则可以着手完成本阶段的另一项主要工作。上面的工作确定了解决问题的策略以及目标系统需要哪些程序,但是,怎样设计这些程序呢结构设计的一条基本原理就是程序应该模块化,也就是一个大程序应该由许多规模适中的模块按合理的层次结构组织而成。总体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。通常用层次图或结构图描绘软件的结构。在了解了系统总体设计的概念及要求后,完成自己的总体设计,由于这个项目是用于毕业设计的,并不是用于其他用途的,所以,就只有一个方案,没有顾及成本,只有软件方面,就是一个人开发的。42系统总体设计描述在对需求分析进行了系统研究后,决定了总体设计的方案。首先有一个系统的主界面,在这个主界面上,并没有关于导航的其他信息,只有进入导航的入口,和有关开发人员的信息(主要包括学校,所在实训基地,开发人员的基地指导老师,还有开发人员自己的信息查询),除此之外,还有系统时间的显示,查看当时的时间,还有学校名字的显示。其次,是导航系统的主界面,在主界面中可以查看景点信息,查看路径,选择终点和起点,在不需要再使用系统时,可以选择退出系统。43系统总体设计模块划分在了解了需求,分析了需求分析后,划分出了模块。主要的模块由显示系统主界面,显示导航系统主界面,查询导航有关人员的模块。在导航系统主界面主界面中有小的模块,主要的模块有退出系统模块,显示景点信息模块,查询路径模块,选择和更改起始点模块。431主要模块划分图在划分完模块后,主要的模块由显示系统主界面,有显示校园导航系统主界面,还有查询相关等三个主要模块,得到主要的模块划分框图,如图41所示图41主要模块划分图432显示系统主界面模块设计在我的系统中,首先现实的是整个系统的主界面,并不会直接进入到导航界面,显得有点突兀,所以有一个整个系统的主界面,在从这个界面中进入到导航系统的主界面,进行过渡一下,下面是我的这个界面的框图。其中,在选择进入导航系统时,有两种选择1点击开始按钮,2在主页面上,有一张学校的图片,点击图片也会进入到导航主系统。如图42所示图42系统主界面模块细分图在退出系统时,也可以有多种选择,可以选择直接推出,也可以选择重新使用系统,提供多种选择。如图43所示图43退出系统模块划分图433查询导航有关人员模块设计不论是在系统主界面,还是在导航主界面中,在界面的下端都有一个模块是用来查询与该毕业设计有关的人员,有关的人员主要有所在的学校、所在的培训基地,开发者本人,以及开发者的基地指导老师,相应的模块设计如下。如图44所示图44查看相关人员模块细分图434导航主界面的模块的设计在这个毕业设计中,最重要的是,校园导航系统的实现。在这个系统中,我要实现的功能有查询两个景点之间的最短路径,两个景点间的所有路径,每个景点的信息查询(主要包括景点描述信息,该景点可以到达的所有其他景点的最短路径信息),还有在切换起始点和终点的时候,同时出现这两个景点的图片,当点击查询路径按钮是,则在该位置上出现的是学校的总体布局图。首先,得到导航系统主界面的主功能图。如图45所示图45校园导航主界面模块划分图在查询路径的时候,同时需要干两件事,在一个地方现实最短路径及其长度,在另一个地方显示所有这两个景点之间的路径。如图46所示图46路径查询模块细分图44本章总结在本章中,我主要的工作就是,完成总体设计,得到模块划分图,和各个模块的细分图,在接下来的系统设计中,以此为基础来进行详细设计。5详细设计51详细设计概述总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题“应该怎样具体地实现这个系统呢”。这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。研究一下一般的详细设计主要需要完成什么样的功能。详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的目标有两个实现模块功能的算法要逻辑上正确和算法描述要简明易懂。基本任务1为每个模块进行详细的算法设计。用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。2为模块内的数据结构进行设计。对于需求分析、概要设计确定的概念性的数据类型进行确切的定义。3为数据结构进行物理设计,即确定数据库的物理结构。物理结构主要指数据库的存储记录格式、存储记录安排和存储方法,这些都依赖于具体所使用的数据库系统。4其他设计根据软件系统的类型,还可能要进行以下设计代码设计。为了提高数据的输入、分类、存储、检索等操作,节约内存空间,对数据库中的某些数据项的值要进行代码设计。输入/输出格式设计。人机对话设计。对于一个实时系统,用户与计算机频繁对话,因此要进行对话方式、内容、格式的具体设计。5编写详细设计说明书。6评审。对处理过程的算法和数据库的物理结构都要评审。由于该项目是自己实现的,所以就没有复杂的流程。52校园导航系统主程序流程图在确定了总体设计后,画出详细设计中,主流程图。点击开始就进入了导航主系统,进入到主系统后,就会实例化一系列的类的对象,主要是窗口的实例化,还有图的实例化,所有的实例化后,就可以进行导航了。如图51所示图51程序总体流程图53单源最短路径算法介绍在我的程序中,需要使用到路径查询,最重要的就是最短路径查询,所以需要设计一下所使用的算法。531DIJKSTRA迪杰斯特拉算法DIJKSTRA迪杰斯特拉算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。DIJKSTRA算法能保证找到从起点到终点的一条最优路径,只要路径权值不会为负。DIJKSTRA一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN,CLOSE表的方式,这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权回路。算法的具体步骤如下1初始化时,S只包含原点,即SV,顶点V到自己的距离为0。U包含除V外的其他顶点,V到U中顶点U的距离为边上的权或者INFINITE(无通路)。2从U中选一点K,顶点V到顶点K的距离最小,然后把顶点K加入S中(该选定的距离就是V到K的最短路径长度)。代码实现如下INTMININFINITEFORINTI0I上的权。代码实现如下FORMAPITERATORITM_EDGES2NOBEGINITM_EDGES2NOENDITIFDONEITFIRST1CONTINUEELSEIFDISTANCENOITSECONDSETTOOLTIP“点击进入太原理工大学导航系统“最后使用布局管理器对以上控件进行布局。利用ADDWIDGET函数将控件添加进布局管理器,实现布局。并且设置每个控件的属性。在主程序中,每个模块我都把他封装在一个类中,这样便于代码的管理。GLOBALNEWQVBOXLAYOUTTHISGLOBAL是我自己添加的一个总的布局,属于整个系统的总的布局。M_URL_LAYNEWMYURLLAYM_URL_LAY是我自己封装的一个类的对象,主要包括的是我在程序中使用到的网页链接MAJORNEWQVBOXLAYOUTMAJOR是我自己添加的一个布局,主要是整个程序的主要显示页面。M_START_LAYNEWMYSTARTM_START_LAY是我自己封装的一个类的对象,主要包括的是校园导航的开始和结束。M_TITLENEWQHBOXLAYOUTTOPNEWMYSHOWPICBOTTOMNEWMYSELECTCENTERNEWMYSHOWSPOTSHOWTEXTNEWMYSHOWPATHALL_BOTTOMNEWMYBOTTOMM_TITLE是使用的系统定义的布局。TOP是我自己实现的,主要包含我需要展示的图片。BOTTOM是我自己实现的,主要包含我的选择地点的控件。CENTER是我自己实现的,主要包含我需要展示的经典的信息。SHOWTEXT是我自己实现的,主要用于展示我的路径的信息。ALL_BOTTOM是我自己实现的,主要用于展示系统的时间信息。SCHOOL_WECSETTEXT“欢迎进入太原理工大学“SCHOOL_WECSETMOUSETRACKINGTRUESCHOOL_WECSETSIZEPOLICYQSIZEPOLICYIGNORED,QSIZEPOLICYIGNOREDSCHOOL_WEC是主界面上的进入系统的按钮,其余的设置都在对应的类中封装了。主界面布局的代码实现THISSETWINDOWTITLE“太原理工大学校园导航系统“QPALETTEPALETTETHISPALETTEPALETTESETCOLORQPALETTEBACKGROUND,QCOLOR255,251,240THISSETPALETTEPALETTETHISRESIZE900,650GLOBALNEWQVBOXLAYOUTTHISM_URL_LAYNEWMYURLLAYMAJORNEWQVBOXLAYOUTM_START_LAYNEWMYSTART/M_TITLENEWQHBOXLAYOUTALL_BOTTOMNEWMYBOTTOMSCHOOL_WECNEWMYBUTTONSCHOOL_WECSETMOUSETRACKINGTRUESCHOOL_WECSETSIZEPOLICYQSIZEPOLICYIGNORED,QSIZEPOLICYIGNOREDMAJORADDWIDGETSCHOOL_WECGLOBALADDLAYOUTM_START_LAY,1GLOBALADDLAYOUTMAJOR,15GLOBALADDLAYOUTM_URL_LAY,2GLOBALADDSTRETCHGLOBALADDLAYOUTALL_BOTTOM,1/获取系统现在的时间CONNECTSCHOOL_WEC,SIGNALCLICKED,THIS,SLOTCLICKWEC_SLOTCONNECTM_START_LAYM_EXIT,SIGNALCLICKED,THIS,SLOTCLICKEXITBTN_SLOTCONNECTM_START_LAYM_START,SIGNALCLICKED,THIS,SLOTCLICKWEC_SLOTSRC_ROW0DEST_ROW0SHOW_WIDNEWQWIDGETM_SHOW_FENGHNEWQTEXTEDITM_SHOW_FENGHSETREADONLYTRUEM_SHOW_FENGHSETSTYLESHEET“BACKGROUNDCOLORRGB255,251,240“QFONTFONTM_SHOW_FENGHFONTFONTSETPOINTSIZE13M_SHOW_FENGHSETFONTFONT相应的系统主界面如图63所示图63系统主界面当鼠标移到主页面上的学校的图片时,会有相应的提示出现,提示,点击图片可以进入到导航主系统。代码为THISSETTOOLTIP“点击进入太原理工大学导航系统“相应的界面如图64所示图64鼠标移到图片上提示信息显示612子页面布局设计主要有组合框QLISTWIDGETS、标示QLABEL、文本框QTEXTEDIT和按钮QPUSHBUTTON这些控件。QLISTWIDGETS有两个,用于路径规划功能,一个选择起点,另外一个选择终点。选择完后,通过发送CURRENTITEMINT信号把当前QLISTWIDGETS选中的行数发送到主窗体的槽函数CHANGEITEM_SLOTINT和CHANGEITEMSRCINT中完成起点与终点的设置。通过ADDITEM实现对两个下拉框内容的初始化。CONNE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论