版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录第一章LINUX图形用户界面 GUI介绍 21.1常用GUI介绍 21.2 关于 QT 31.3 Qi/EmbeddE简介 4第二章QT的安装 52.1 设置环境变量 62.2 使用脚本 ARM-BUILD 编译 QT 7第三章QT的编程 73.1 QT/Embedde开发一个嵌入式应用的过程 73.2 “hellO Qt 的初探 73.2.1 建立工程文件 73.2.2 产生源代码 123.2.3 添加 main.cpp 文件 133.2.4 修改 文件 133.2.5 生成 MakeFile 文件 143.2.6 修改 hello.cpp 文件 153.3将HELL
2、O移植到JXARM9-241C实验箱上 193.3.1 重新生成修改 Makefile 193.3.2 制作启动器 223.3.3 重新生成 cramfs 文件 23烧写重新生成的cramfs文件到JXARM9-241实验箱23第一章 Linux 图形用户界面 GUI 介绍所谓 GUI(Graphics User Interface) 就是图形用户界面。图形用户界面的广 泛流行时当今计算机技术的重大成就之一,它极大的方便了非专业用户的使用, 人们不需要死记硬背大量的命令,而可以通过窗口,菜单方便的操作。随着手持式设备的硬件条件的提高, 嵌入式系统对轻量级 GUI 的需求越来越 迫切。近来的市场
3、需求显示,越来越多的嵌入式系统,包括PDA机顶盒、DVD/VCD 播放机、WAP手机等等系统均要求提供全功能的 Web浏览器。这包括HTML 4.0 的支持、 JavaScript 的支持,甚至包括 Java 虚拟机的支持。而这一切均要求有 一个高性能、高可靠的GUI的支持。另外,在工业实时控制系统中对 GUI的要求 也越来越高。目前许多这类系统采用比较简单的手法实现GUI。但是,在出现Linux 系统之后,许多工业控制系统开始采用 Linux 作为操作系统,并在其上加 入GUI实现。嵌入式GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。所以嵌入式 GUI在实际应用中,
4、有如下基本要求:轻型,占用源少高性能高可靠性可配置1.1 常用 GUI 介绍1.Linux 下的 GUI - X WindowX Window是Linux以及其他类UNIX系统的标准GUI。X Window系统采用标 准的客户 /服务器体系结构,具有可扩展性好、可移植性好等优点。但该系统的 庞大、累赘和低效率也是大家所共知的。为了获得应用程序的可移植性,许多厂家都试图通过对X Win dow系统的紧缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为800K的X服务器。这对西方国家来说基本能够满足嵌入式系统的需求了。 但该系统的源代 码尚不开放,从而很难进行本地化开发。2Linux 下
5、的 GUI - MicroWindowsMicroWindows 是一个开放源码的项目, 目前由美国一家公司在主持开发。 该 项目的开发非常活跃,国内也有人参与了其中的开发,并编写了 GB2312等字符 集的支持。该项目的主要特色在于提供了比较完善的图形功能,包括一些高级的功能, 比如 Alpha 混合,三维支持, TrueType 字体支持等。但作为一个窗口系统,该 项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完 备,键盘和鼠标等的驱动还很不完善。3丄inux 下的 GUI - OpenGUIOpenGU在Linux系统上存在已经很长时间了。最初的名字叫FastGL,只
6、支持256的线性显存模式。但目前也支持其他显示模式。这个库是用C+编写的,只提供C+接 口。4丄inux 下的 GUI - MiniGUIMiniGUI 是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行于 Linux 控制台,实际可以运行在任何一种具有POSIX 线程支持的POSIX兼容系统上。MiniGUI 同时也是国内最早出现的几个自由软件项目之一。是由中国人开发的 GUI。5丄inux 下的 GUI - QT/EmbeddedQT/Embedded是著名的QT库开放商正在进行的面向嵌入式系统的 QT版本。这个版本的主要特点是可移植性较好,许多基于QT的X Window程
7、序可以非常方便地移植到嵌入式版本。 但是该系统不是开放源码的, 如果你要使用这个库, 可 能需要支付昂贵的授权费用。1.2 关于 QtQt 是 Trolltech 公司的一个标志性产品。 Trolltech 公司 1994 年成立于 挪威,但是公司的核心开发团队已经在1992年开始了 Qt产品的研发,并于1995 年推出了 Qt 的第一个商业版,直到现在 Qt 已经被世界各地的跨平台软件开发 人员使用,而 Qt 的功能也得到了不断的完善和提高。Qt 是一个支持多操作系统平台的应用程序开发框架,它的开发语言是C+。Qt 最初主要是为跨平台的软件开发者提供统一的,精美的图形用户编程接 口,但是现在
8、它也提供了统一的网络和数据库操作的编程接口。 正如微软当年为 操作系统提供了友好,精致的用户界面一样,今天由于 Trolltech 的跨平台开 发框架 Qt 的出现,也使得 UNIX、LINUX 这些操作系统以更加方便、 精美的人机 界面走近普通用户。Qt 是以工具开发包的形式提供给开发者的, 这些工具开发包包括了图形设计 器,Makefile制作工具,字体国际化工具,Qt的C+类库等等。Qt的类库也是 等价于 MFC 的开发库,但是 Qt 的类库是支持跨平台的类库Qt 支持的操作系统平台: MS/Windows95、Windows98、WindowsNT4.0、Windows2000、Win
9、dowsXP Unix/X11 Linux、Sun Solaris、HP-UX Compaq True64Unix、IBM AIX、 SGI IRIX 和很多其它 X11 平台 Macintoshi Mac OSX 嵌入式的,包含有 FramBuffer 的 Linux 平台1.3 Qt/Embedded 简介Qt/Embedded 是一个为嵌入式设备上的图形用户接口和应用开发而订做的 C 工具开发包 . 它通常可以运行在多种不同的处理器上部署的嵌入式 Linux 操作系统上除了类库以外,Qt/Embedded还包括了几个提高开发速度的工具,使用标准 的Qt API,我们可以非常熟练的在 Wi
10、ndows和 Unix编程环境里开发应用程序。Qt/Embedded 是一组用于访问嵌入式设备的 Qt C+ API ;Qt/Embedded 的 Qt/X11, Qt/Windows和Qt/Mac版本提供的都是相同的 API和工具。Qt/Embedded 还包括类库以及支持嵌入式开发的工具。Qt/Embedded提供了一种类型安全的被称之为信号与插槽的真正的组件化编 程机制,这种机制和以前的回调函数有所不同。 Qt/Embedded 还提供了一个通 用的 widgets 类,这个类可以很容易的被子类化为客户自己的组件或是对话框。 针对一些通用的任务,Qt还预先为客户定制了像消息框和向导这样的
11、对话框。Qt/Embedded包括了它自身的窗口系统,并支持多种不同的输入设备。Qt的图形设计器(designer)可以用来可视化地设计用户接口,设计器中有一 个布局系统,它可以使你设计的窗口和组件自动根据屏幕空间的大小而改变布 局。开发者可以选择一个预定义的视觉风格, 或是建立自已独特的视觉风格。 使 用UNIX/LINUX操作系统的用户,可以在工作站上通过一个虚拟缓冲帧的应用程 序仿真嵌入式系统的显示终端。Qt/Embedded也提供了许多特定用途的非图形组件,例如国际化,网络和数 据库交互组件。Qt/Embedded是成熟可靠的工具开发包,它在世界各地被广泛使用。除了在 商业上的许多应用
12、以外,Qt/Embedded还是为小型设备提供的 Qtopia应用环境 的基础。Qt/Embedded以简洁的系统,可视化的表单设计和详致的 API让编写代码变 得愉快和舒畅。第二章 Qt 的安装一般来说,居于Qt/Embedded开发的应用程序最终会发布到安装有嵌入式 Linux 操作系统的小型设备上。需要的软件包:tmake工具安装包(生成 Qt/Embedded应用工程的 Makefile 文件) Qt/Embedded 安装包( Qt/Embedded 安装包)Qt的X11版的安装包(Qt的X11版的安装包,它将产生x11开发环境所 需要的两个工具)公司提供的软件包如下:2.1设置环境
13、变量在PC的Linux的终端执行如下命令,然后打开gedit编译器后,修改内容如下红色部分所示:#gedit /etc/ld.so.c onf/home/cvtech/jx2410/qt2410/arm/qt/lib/home/cvtech/jx2410/qt2410/arm/qtopia/lib/usr/kerberos/lib/usr/X11R6/lib/usr/lib/sa ne/usr/lib/qt-3.1/lib/usr/lib/mysql/usr/lib/qt2/lib2.2 使用脚本 arm-build 编译 Qt这里假设以上的软件包已经全部拷贝到 PC 的 Linux 中,且存
14、放目录为: /home/cvtech/jx2410/qt2410/在PC的Linux的终端执行如下命令:# cd /home/cvtech/jx2410/qt2410/# ./arm-build ,然后就开始编译 Qt 了。注意:这里我使用的是 Redhat9.0,然后是完全安装的,RedHat9.0完全安 装大概需要 4.8G 的空间,如果不完全安装会导致编译出错,原因是缺少必要的 库导致的。第三章 Qt 的编程3.1 Qt/Embedded 开发一个嵌入式应用的过程选定嵌入式硬件平台在工作的机器上安装Qt/Embedded工具开发包 根据目标硬件平台,交叉编译 Qt/Embedded 的库
15、 在工作的机器上进行应用程序的编码,调试 根据目标硬件平台,交叉编译嵌入式应用 在嵌入式硬件设备上调试运行应用发布嵌入式应用3.2 “hello ” Qt 的初探第一次 Qt 程序实现一个功能,就是按下我们设置的 user 按钮后,显示出 “hello cvtech ”的打印信息,按下 close 按钮后,退出该应用程序。3.2.1 建立工程文件目录下新建一个在 PC 的 Linux 的“/home/cvtech/jx2410/examples/qt/名为:“hello ”的目录,命令如下:# cd /home/cvtech/jx2410/examples/qt/# mkdir hello建立
16、工程文件 ,命令如下:# progen - t app.t - o 在后台启动QT的设计器,命令如下:# /home/cvtech/jx2410/qt2410/arm/qt/bi n/desig ner &新建项目文件,选择工具栏 File > new >Dialog ,然后点击0K按钮,结果如下:设置 Form1 的属性,修改“name 为 hello,修改“caption ”为 Hello Cvtech。然后添加两个按钮,分别修改“ name分别为obutton 和cbutton,修改“ text 分别为 open 和 close 。
17、然后在添加一个text图标,修改“ name为Tlabel,修改“ text ”为空设置完成后,如图:Ecit Toole L&OLrt Prvi WiTid/郅 Bl*堅氤 SI莒芾爾机an 潭 如曰® 図 HDBn*iI30O 顾 t ElUtn®FdrEwPtnppl/nauuTLJtjOlTrueHelpB tiiHJiwlryEl siEePDllcyIB Ink ilfriLiln j-kf*0.0|国rriMnuirSI甜 J占宵3J越7 |pElelfe fuiil|Heheihca-30iFamily idDOe-caunet Point Siie
18、 iOkEaidHaleaiseUnderlini? 二 R 耳旨cLrscrArroLvmusTrscM -aisefocus-1 ni 蚀naFdchjs訂空“吕忌I:-X完成以上工作后,我们需要添加函数,使按钮能够对其进行响应,方法如下: 选择工具栏中的Edit >slot ,新建两个函数,分别为open()和close (), 如图所示:F面的操作涉及到了 QT中的信号和槽的概念,我的理解按钮的操作时信号槽就是该操作所响应的函数。如下图所示,完成open按钮和close按钮的链接。 首先点击按钮,然后点住open按钮不要松开,向上拉动到 Forml的空白地 方,如图:同样的方法建
19、立close按钮的响应关联,如图:然后在Edit >slot中去除close ()函数,如图:完成以上操作后,保存图形文件,点击工具栏File > save,如图:然后退出设计器。注意:每次修改*.ui的工程文件后,必须使用下面的方法重新生成源码, 否 则会出现编译出错的情况。322产生源代码在PC的Linux的终端中,输入命令如下:hello.ho hello.cpp -impl# /home/cvtech/jx2410/qt2410/arm/qt/bi n/uic hello.ui# /home/cvtech/jx2410/qt2410/arm/qt/bi n/uichello
20、.h hello.uiI TOQilGCFilho ( qt) f rikdi r hr rnn ( IaIjou t lucmlhos trsoirhr I I < rdruu i Eluulhu s(I 2fi9S8【run l A Idej J lio t1+ Dune(mo t n I h:pI.h hello,uifoa t J y c a J ho s tJhoii t <| I) E hid Ioi h«、I I a Ihe Iufhelloj#hr 1 In.rpp hrlln.h hr I 1 | rctol ilocnlho11 hr I Lajfhr
21、 Ioproven -1 uppu t helI/hum?/lcch/jK24lO/qt241O/ariVqt2bin/deb氐i liutit/ c > l r c 11 / j 124 10/q 124 I U/ a rm/ q t / h i n/ u i l- o h r I I a. h h c I n. /hunr/cv lech/jx24iO/q24iO2Eu ni/ql?lii/Jt. :;LKrier/horrr rvirch/j!<24 IO/qt 2A I 0/arnVq t / h i n/n i-o hf11 Io. rpp - 1叩1 hehe
22、llof I *Lprf> hr 1 I n . ii i323 添加main.cpp文件在PC的Linux的终端中,输入命令如下:# vi mai n.cpp代码如下所示:#in elude "hello.h"#inelude vqapplication.h>#defi ne QT_NO_WIZARDint main(int argc, char *argv)QApplication a(argc,argv); hello dlg;a.setMai nWidget(& dlg);dlg.show();return a.exec();3.2.4 修改 h
23、 文件在PC的Linux的终端中,输入命令如下:# vi 修改内容如下:TEMPLATE = appCONFIG= qt warn_o n releaseHEADERS= hello.hSOURCES= hello.cpp main .cppINTERFACES325 生成MakeFile 文件在PC的Linux的终端中,输入命令如下:# qmake 此时得到的Makefile 文件编译出来的hello,是在PC的Linux上可以运行的。# make如卅上 齐角土 HI) :、土竝 Tort'll-1$h ii I I o. p r
24、Q hr lie qniilit Kel mikerm i n , r jiptod I 'lo cal ho s I he! I a thr I I it r I . ti. Cpii hf J Infdq Lilova Hint l hvl lolfi TQO lllOM I he lloH岸十+ -c -pipe WII WO?-nrpu- ifiSfi -g - nXX_(U(EXT_ JCCY - fno-uiecita-a Iex i L - fiiu-ckvepi j um -DOT_NO. DEBUG - /ul t/l1/nLper/di1 fu 11
25、- I, -1/utr/l ib/qt1/includc -a he I Io.0 heeppj; i * c pWill W <12 - im( u li* i 3K6 in pu-g - IX J-X _< I-XHKI _Utl At 2Y fno ust nxa a t(js.il -niu-PAiepi iuiik - DOT _ND_ DEBUG - l/usii /1 ib/ql-3 . l/nLtpecs/de fau 11 - 1. - 17lim / I ib/q i -3.1/ inc ludc * iruiTi .a rm in, epprUs r/ I i
26、b/q l-'A. L?b m/rmf he 1 Io. h -n mi: _hf I Io. <?pp疋+ -c -pipe -Wil -W-O2 -Tmfch=i3fiG -m?pij=i68G r -DtJLK ELkEXT LEGACY - fno-uie-cka-Lii ck i L - FjlO-except iDnii -DOT_5D. CEBLG - ll/usr/ I ib/ql-3.1/irkpccs/defaul t - I - l/usi/ i h/q t!?. J / i nt* lu dif -a rm c _ht 1 I tirm c t In, t
27、pp胚+f -o hello he】lo a neir nuc he lo.o -L/un r/1 j b/ql3.1/1 ib L/us r/X) 1R3/ lib -1 q l - rrl l -IXcxt -JX11 -Jm(too II hOH I he I 11 ft |得到可执行文件hello ,在PC的Linux的终端中,输入命令如下:# ./hello得到界面如下:326修改hello.cpp 文件为了实现前面讲到的按下 open按钮,出现“ hello cvtech ”的打印信息, 我们还需要修改 文件,以下为源码内容:/* Form impleme nta
28、ti on gen erated from read ing ui file 'hello.ui'* Created: Thu Nov 12 10:38:17 2009* by: The User In terface Compiler (uic)* WARNING! All changes made in this file will be lost!*/ #in clude "hello.h"#in clude <qlabel.h>#in clude <qpushbutt on .h>#in clude <qlayout.h
29、>#in clude <qvaria nt.h>#in clude <qtooltip.h>#in clude <qwhatsthis.h>/*Constructs a hello which is a child of 'parent', with then ame 'n ame' and widget flags set to 'fThe dialog will by default be modeless, uni ess you set 'modal' toTRUE to con stru
30、ct a modal dialog.hello:hello( QWidget* pare nt, const char* n ame, bool modal, WFlags fl ):QDialog( pare nt, n ame, modal, fl )if ( !n ame )setName( "hello"); resize( 312, 280 );setCaptio n( tr( "Hello Cvtech");cButton = new QPushButton( this, "cButton");cButton->se
31、tGeometry( QRect( 180, 190, 91,31 );cButto n->setText( tr( "close");oButt on = new QPushButto n( this, "oButto n");oButton->setGeometry( QRect( 40, 190, 91, 31 );oButton->setText( tr( "open");TLabel = new QLabel( this, "TLabel");TLabel->setGeometry
32、( QRect( 30, 60, 250, 51 );QFo nt TLabel fo nt( TLabel->fo nt();TLabel fo nt.setPoi ntSize( 30 );TLabel->setFo nt( TLabel fo nt );TLabel->setText( tr("");/ sig nals and slots conn ecti onsconnect( oButton, SIGNAL( clicked() ), this, SLOT( open(); connect( cButton, SIGNAL( clicked(
33、) ), this, SLOT( close();/*Destroys the object and frees any allocated resourceshello:hello()/ no n eed to delete child widgets, Qt does it all for us/* Mai n eve nt han dler. Reimpleme nted to han dle applicati on* font cha ngesbool hello:eve nt( QEve nt* ev )bool ret = QDialog:eve nt( ev );if ( ev
34、->type() = QEve nt:Applicati onFon tCha nge ) QFo nt TLabel fo nt( TLabel->fo nt();TLabel_font.setPointSize( 30 );TLabel->setFo nt( TLabel_fo nt );void hello:ope n()|TextLabel1->setText(tr("Hello Cvtech!");/qWarni ng( "hello:ope n(): Not impleme nted yet!");|在上面的open
35、()函数中添加了对按下 open按钮响应的处理功能,即按下 按钮后,打印出“ Hello Cvtech !”这句话到主界面中。修改完成后保存,重新 编译# make再次执行# ./hello按下open按钮,结果如图:3.3将hello 移植到JXARM9-2410实验箱上3.3.1 重新生成修改 Makefile因为是要在实验箱上运行,那么编译器也必须是交叉编译,就需要新的Makefile 文件。使用tmake产生Makefile,在PC的Linux终端中输入命令:# tmake - o Makefile 修改Makefile文件如下:CC = CXX= /usr/loca
36、l/arm/2.95.3/bi n/arm-li nu x-g+QTDIR = /home/cvtech/jx2410/qt2410/arm/qtQPEDIR = /home/cvtech/jx2410/qt2410/arm/qtopiaCFLAGS = -pipe -Wall -W -O2 -DNO_DEBUGCXXFLAGS=-pipe -DQWS-fno-exceptio ns-fno-rtti -Wall -W -O2-DNO_DEBUGINCPATH = -l$(QTDIR)/i nclude -l$(QPEDIR)/i ncludeLINK= /usr/local/arm/2.95
37、.3/bi n/arm-li nux-g+LFLAGS =LIBS= $(SUBLIBS)-L$(QTDIR)/lib-L$(QPEDIR)/libMO(= $(QTDIR)/bi n/mocUIC = $(QTDIR)/bi n/uicTAR= tar -cfGZIP = gzip -9f# FilesHEADERS =hello.hSOURCES =hello.cpp main .cppOBJECTS = hello.o main .oINTERFACES =UICDECLS =UICIMPLS =SRCMOC = moc_hello.cppOBJMOC = moc hello.oDIST
38、 =TARGET = helloINTERFACE_DECL_PATH =.# Implicit rules.SUFFIXES: .cpp .cxx .cc .C .c.cpp.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $<.cxx.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $<.cc.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $<.C.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $<.c.o:$(CC) -c $(CFL
39、AGS) $(INCPATH) -o $ $<# Build rules all: $(TARGET)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)moc: $(SRCMOC)tmake: MakefileMakefile: tmake -o Makefiledist:$(TAR) hello.tar $(SOURCES) $(HEADERS) $(INTERFACES)$(DIST)$(GZIP) hello.tarclea n:-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年股东股权转让合同书(含保密协议)
- 2024广告创意设计及实施合同样本版B版
- 2024年离异夫妇对大学生子女抚养安排
- 2024年股权赠与协议模板3篇
- 2024年跨国货物买卖履行合同
- 2025年度防雨棚施工安全监督及验收合同2篇
- 物理专业英语词汇-Q
- 三年级上册信息技术教学计划4篇
- 2025年度果树租赁与果树品种研发合作协议3篇
- 图形的相似教学反思7篇
- 山东省青岛市第二中学2023-2024学年化学高二第一学期期末综合测试试题含解析
- 网上商城 售后服务范本
- 《安的种子》幼儿故事
- 机械工程师笔试题目
- 实用卫生统计学题库(附参考答案)
- 浙江省杭州市拱墅区2023-2024学年数学三年级第一学期期末质量检测试题含答案
- 伤口敷料种类及作用-课件
- 高考语文复习:作文主题训练自然情怀
- 减速机基础知识-课件
- 2023年小学生六年级毕业班评语
- 单位干部职工捐款情况统计表
评论
0/150
提交评论