基于Qt的嵌入式Linux开发的GUI设计研究与实现.doc_第1页
基于Qt的嵌入式Linux开发的GUI设计研究与实现.doc_第2页
基于Qt的嵌入式Linux开发的GUI设计研究与实现.doc_第3页
基于Qt的嵌入式Linux开发的GUI设计研究与实现.doc_第4页
全文预览已结束

下载本文档

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

文档简介

基于Qt的嵌入式Linux开发的GUI设计研究与实现【摘 要】随着嵌入式系统的发展,在Linux下使用Qt开发嵌入式应用程序是嵌入式图形用户界面(GUI)系统应用研究的重点。 本文结合智能温度控制系统人机界面开发的需求,介绍了Qt 及其第三方插件图形库Qwt 的特点,并详细描述了嵌入式GUI开发环境的搭建及嵌入式Linux程序开发的关键技术,包括信号与槽机制的使用、程序主要功能代码的实现。最后介绍了智能温度控制系统GUI中串口通信及图形绘制等关键部分的设计与实现。【关键词】Qt;Linux;Qwt;嵌入式系统;图形用户界面0 引言随着计算机技术和信息网络技术的飞速发展, 嵌入式系统的应用越来越广泛,越来越受到人们的青睐。嵌入式技术被应用于各个领域,如消费电子、工业控制等领域。大多数的工业检测系统都涉及到现场数据的实时采集,要求有更加友好、便于操作的人机交互界面,利用Qt及其第三方插件图形库Qwt 能设计出加快图形显示的操作方便的嵌入式智能终端控制系统。本文以智能温度控制系统的开发为背景,介绍了Qt及其第三方插件图形库Qwt,最后介绍了智能温度控制系统GUI中串口通信等关键部分的设计与实现。1 系统平台的构建 由于嵌入式系统本身硬件条件的一些限制, 需为系统开发构建交叉编译环境。交叉编译环境是由宿主机和目标板两套计算机系统构成的。 本文的宿主机是在PC机上使用VMware Workstation 构建的Linux系统,使用的是Fedora13。目标板基于三星S3C2440处理器, 并扩展了触摸屏、NAND FLASH、串口、网口、SD 卡座、JTAG 等块。目标板如图1 所示: 图1. 系统所使用的目标板平台2 Qt及第三方插件图形库Qwt简介2.1 Qt简介Qt是Trolltech开发的专门为小型的嵌入式设备提供图形交互界面的C+开发框架,是一个跨平台应用程序和UI框架,它包括跨平台类库、集成开发工具和跨平台IDE。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt按照应用环境的不同,可以分为PC机环境的X11版本(Qtxll)与嵌入式环境的Embedded版本(QtEmbedded)。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。QtEmbedded 不依赖于X Window,在底层直接对framebuffer(帧缓冲)进行操作。使用Qt只需一次性开发应用程序,无须重新编写源代码,便可在不同桌面和嵌入式操作系统部署这些应用程序。它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点。2.2 第三方插件图形库Qwt简介Qwt 是一个基于LGPL 版权协议的开源项目,Qwt 类库包含GUI 组件和一组实用类。提供了一组2D 的窗体库来显示数据,显示方式主要有曲线、罗盘、滑尺、旋转体等。该工具库基于Qt 开发,所以也继承了Qt 的跨平台性,在使用Qt 进行图形界面开发的环境中都可以使用Qwt。在工控领域的检测系统中常涉及到对检测数据的实时显示,利用Qwt 库中的类可以快速地开发出符合要求的显示图。3 Qt/Embedded开发环境的搭建嵌入式平台上的图形界面程序采用交叉编译的方式进行,即先在装有Linux系统的宿主机上进行开发, 再进行交叉编译生成目标板所能执行的程序。开发环境的建立主要包括宿主机和目标板两个部分。在PC宿主机上,需要的编译器是gcc-4.1.2,除此之外,还需要得到两个版本的Qt,分别是:Qt-4.7.3和QtEmbedded-4.7.3-arm。前者用于在PC上对程序的开发调试,使我们能确保程序放到板子上之前就符合设计的要求;后者的库能将调试好的程序编译成能在arm-linux平台上运行的程序。Qt-4.7.3可以用从是Trolltech 公司官方网站下载的qt-x11-opensource-src-4.7.3.tar.gz编译后安装得到,同样的,QtEmbedded-4.7.3-arm也可从其官网下载qt-embedded-linux-opensource-src-4.7.3.tar.gz编译后安装得到。在编译QtEmbedded-4.7.3-arm之前,必须准备好arm-linux-gcc交叉编译工具,用的版本是arm-linux-gcc-4.3.2。3.1 QtEmbedded在x11平台下的安装 Qtxll版本可以生成虚拟帧缓存(qvfb),模拟嵌入式系统的运行状态,并在PC机上查看程序的运行结果。同时产生Qt开发工具,如designer等等。3.1.1 Qt-4.7.3的安装及配置 #tar zxvf qt-x11-opensource-src-4.7.3.tar.gz,cd进入这个目录,准备开始编译。在终端中这样操作: #./configure qvfb /编译配置 #make /正式编译 #make install设置环境变量: export QTDIR=qtxl 1 export PATH=$QTDIRbin:$PATH export LD_LIBRARY_PATH=$QTDIRlib:$LD_LIBRARY_PATH3.1.2 QtEmbedded-4.7.3-arm的安装及配置 在编译安装qt-embedded-linux-opensource-src-4.7.3之前,必须先配置好arm-linux-gcc-4.3.2.tar.bz2将其解压到目录/usr/local下,此时local下出现一个名为arm的目录,然后配置好环境变量:在/etc/profile添加一句:export PATH=$PATH:/usr/local/arm/4.3.2/bin,保存后source /etc/profile,让它即时生效。之后进行编译:make,make install。3.2 ARM 平台Qt库编译与移植3.2.1 编译ARM 平台Qt 库进入qt-arm-src-4.7.3目录:cd qt-arm-src-4.7.3配置Qt 库。在./configure命令中通过参数-embedded arm 指定生成库的平台.由于目标板使用的是触摸屏,在配置的时候需指定触摸屏所需的tslib库的路径。编译安装:make,make install。编译生成的ARM 平台Qt 库安装在/opt/ qt-4.7.3目录下。3.2.2 移植qt-4.7.3到目标板在目标板上执行Qt 程序时需要调用相关的Qt 库, 所以需在/opt/qt-4.7.3目录下提取必要的文件如:lib和plugins目录中的文件,并拷贝到目标板/opt/ qt-4.7.3的相应目录中,在目标板上运行Qt应用程序之前先要进行环境变量的配置。可以写入脚本文件中,要设置时直接执行脚本文件即可。3.3 Qwt图形库的编译与移植本文使用的是qwt-6.0.1.zip。解压Qwt源码包:unzipqwt-6.0.1.zip。由于使用交叉编译的方式进行开发,所以编译的Qwt 库必须包括宿主机和目标机两个版本,需两份源码包,分别命名为qwt-x11-6.0.1和qwt-arm-6.0.1。3.3.1 编译生成宿主机上的Qwt库设置环境变量指定宿主机上开发Qt 程序所使用的库对应的qmake,这里使用嵌入式X86 版本的Qt 库来进行开发,所以设置如下:export PATH/usr/local/Trolltech/Qt-x11-4.7.3 /bin /:PATH进入目录qwt-x11-6.0.1,编译生成Qwt 库文件:qmake,make。对编译好的Qwt库进行安装:make install,安装目录可以通过修改qwt 源码目录中的qwtconfigpri文件来实现。3.3.2 编译生成ARM 平台的Qwt库设置环境变量指定目标板上使用的Qt库对应的qmake,设置如下:export PATH/opt/qt-4.7.3/ bin:PATH进入目录qwt-arm-6.0.1,编译生成,Qwt 库文件并安装:qmake,make,make install。通过修改qwtconfig.pri设置安装目录。最后,由于开发的Qt 应用程序中使用了Qwt 库文件, 所以需要将生成的ARM 平台的Qwt 库文件拷贝到目标板的/opt/qt-4.7.3/lib目录下。4 智能温度控制系统的GUI设计4.1 智能温度控制系统的GUI架构介绍 智能温度控制系统GUI部分属于系统的控制层,主要完成人机交互界面设计、参数设定、数据存储及其分析等功能。选用ARM2440Linux2.6.30内核的操作系统,提高了系统可靠性。它和下层的接口采用串行口方式完成。控制层的GUI部分主要完成智能温度控制系统的状态显示、系统参数的设置、信息存储及系统状态图表的输出等功能。控制层所需的数据信息都是下一层控制层通过串口传输过来的。4.2 智能温度控制系统的GUI界面开发 在Qt中,“事件驱动”通过SignalSlot(信号和槽)机制实现。Signal主要是各可视化组件产生的事件,这些事件通常由Qt控件预定义,如按钮单击事件clicked等。Slot是对某个事件的处理方法,它也属于类的成员函数,其编写和普通成员函数类似。当需要处理某组件的Signal事件并要求把定义好的Slot作为响应事件的方法时,只要在实现文件中使用connect函数把Signal和指定的Slot连接起来即可。当对象改变其状态时,信号被发送,对象不关心有没有其它对象接收到这信号,可以将信号和槽通过connect函数任意相连。4.2.1 创建GUI基本框架启动Qt Creator,根据工程的创建向导生成基于QWidget的Qt4 应用程序。由于程序要实现多个功能模块,每个模块有不同的界面设计和布局, 为了方便布局使用了Qt Creator 中的Stacked Widget 控件作为程序界面的主框架控件。Stacked Widget 控件可包含多个页,根据功能模块的要求在各页上放置所需控件,完成布局。在Stacked Widget下面是Push Button按钮,通过这些按钮来实现Stacked Widget 中不同页的切换。主界面如图2 所示。 图2. 智能温度控制系统的GUI界面 为了实现通过按钮来切换Stacked Widget中页的功能,利用了Qt中的信号和槽机制。为每个按钮控件定义一个槽函数,并与按钮的clicked()信号进行连接。在槽函数中调用QStackedWidget类的setCurrentIndex(int index)函数实现Stacked Widget 页的切换。4.2.2 第三方插件Qwt图形库完成图表显示这一部分主要完成对接收的数据的实时显示。通过使用Qwt图形库提供的相关类,快速实现基于Qt 的图表显示。主要使用了QwtPlot、QwtPlotCurve、QwtLegend 等类来完成。温度曲线如图3所示。 图3. 智能温度控制系统的温度曲线图4.3 串口模块的设计与实现由于GUI 界面显示所需的数据是通过串口从控制层获取的,所以串口通信模块是系统中的关键部分。要使用串口首先必须打开串口设备并设置属性,如下是打开串口的实现代码:ManageSerialPort:open()res=extSerialPort.open(QIODevice:ReadWrite;/以读写方式打开串口,res=trueif (closeCalled)/若关闭的调用状态为trueif (saveStateSendEnabled)/若保存发送使能状态为true enableSending();if (saveStateReceivedEnabled)/若保存接收使能状态为true enableReceiving();if (saveStateReceiveData)/若保存接收数据的状态为true receiveData();closeCalled = false;return res;打开串口设备后,关键是实现对设备的读写操作,这里主要说明对串口的读操作。当串口收到数据时,系统应该及时的读取数据并进行存储和显示。这里读取串口数据利用了Qt的事件驱动机制,系统使用了Qt的QSocketNotifier 类来监听串口是否有数据,并结合Qt的信号和槽机制,完成串口数据的读取。当串口接收到数据时,QSocketNotifier 发射activated 信号,通过在系统中创建一个接收数据的槽函数连接到此信号。本系统中读取的数据先放到了定义的数组recData中,再写到文件中进行存储。写文件关键代码如下:/打开文件QFile *filenew QFile(/sdcard/statusInfoTable.txt);if(!file-open(QIODevice:WriteOnly|QIODevice:Append )QMessageBox:information(this, tr(提示), tr(打开文件出错);return;/写入文件QTextStream out(file);/此处进行数据的转换以及系统时间的获取for(int i0;idatLen;i+) / datLen 为转换为16 进制后接收数据的长度out hexData.at(i); /将接收到的数据写入文件中out close();5 总结由于Qt 具有良好的跨平台性,提供了丰富的API 接口,使得其在基于嵌入Linux系统的平台上进行图形界面开发既方便又快捷。文中介绍的Qt应用平台的搭建以及基于S3C2440目标板的移植方法具有一定通用性, 智能温度控制系统图形界面的开发方法也可推广应用到其它嵌入式图形界面开发项目中。由于Qt/Embedded本身面向高端的手持式设备和移动设备, 将成为未来嵌入式系统的主流。这些应用的关键在于人机交换技术的体现, 所以一个十分友好的图形用户界面(GUI)是必不可少的。References(参考文献)1加拿大JASMIN BLANCHETTE,英MARK SUMMERFIELDC+GUI Qt4编程M2版囝锋欣,曾泉人译北京:电子工业出版社,20102英 Mark Summerfield. Qt高级编程.白建平.译.北京:电子工业出版社.2011.3杨宗德,邓玉春. LINUX高级程序设计M.北京:人民邮电出版社.2009.10.4 李凡. Qt/Embedded在嵌入式Linux系统下的移植与应用.科技信息,2009, 16(7):79-80. The design and implementation of Embedded Linux development GUI based on QtAbstract:with the development of the embedded system, Qt become the key research of embedded Graphical User Interface(GUI) s

温馨提示

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

评论

0/150

提交评论