当前位置:首页 >> 机械/仪表 >>

基于Qt和ARM的无线点菜系统软件设计


厦门大学 硕士学位论文 基于Qt和ARM的无线点菜系统软件设计 姓名:吴鑫毅 申请学位级别:硕士 专业:机械电子工程 指导教师:洪永强 20090601

基于Qt和ARM的无线点菜系统软件设计

摘要

随着国民生产生活水平的不断提升,人们对餐饮消费的要求越来越高.而无

线点菜系统能够提供更加快

速,便捷,透明,卫生的餐饮条件,对餐饮企业服务
质量和管理效率的提高具有重要意义.

本课题通过考察现有的电子点菜系统的解决方案,研究一种无线点菜系统的
软件设计.利用实验室已有的YLSBC2440开发板作为硬件载体,综合应用 WLAN,嵌入式Linux和Qt开发等技术,以程序软件的通用性和易用性为方向, 构造能够方便应用到各种PDA系统的点菜终端程序和普通PC机的服务器软件, 实现无线点菜系统.主要包括以下研究内容: 1.构建嵌入式Linux系统开发平台.使用Ubuntu系统建立基本开发环境, 建立交叉编译工具,安装配置NFS;安装用于开发点菜终端程序的Qt,包括 Qt/X 1 l,x86版Qt/Embedded,ARM版Qt/Embedded. 2.设计点菜终端程序.利用Qt设计器规划点菜终端程序的大致界面,然后 根据QtlEmbedded编程一般规则编写代码,主要分为浏览器核心类和主窗口类的 实现,并在主程序中添加国际化和中文支持,再通过NFS测试. 3.建立服务器网站.利用普通PC机+Windows XP作为网站服务器,以IIS5.1 建立ASP网站,使用DREAMWEAVER和ACCESS2003进行网页开发,主要包

括登录管理,点菜导航,餐台使用,菜单列表,选单提交等功能页面.
4.调试和发布程序.在开发板原配内核及文件系统的基础上,内核配置无线 网卡支持,根文件系统中添加点菜终端程序,库文件,无线网卡驱动和无线管理 工具,设置环境和启动脚本,烧写入开发板后连接到WLAN,发布运行程序.

关键词:Qt;点菜系统;软件设计

Software Design of Wireless Order System Based on

Qt and ARM

Abstract

With the

continuous raise of national product and living level,people now pay
on

more and more attentions

better

quality of catering

consumption.While the and
sanitary

wireless order system could provide more rapid,convenient,transparent

catering conditions,which are considered to be the key points for improvement of catering service quality and This

management

efficiency.
a

subject

designs the software of

wireless order system after analyzing the
on

existing solutions of electronic order system.It focuses properties of the system'S software,utilizes

universal

and

easy-use board

the

existing

development

YLSBC2440,and integrates

WLAN,Linux

and

Qt,to

construct a kind of wireless

order system'S terminal application and remote ported to various PDA and 1.Constructing
a conlnlon

server

software,which could be easily
are

PC.The main research contents

as follows:

platform for embedded Linux software development.Fistly
a

establish the basic development environment including

cross-compiler

and

NFS tools,

server

in

Ubuntu7.1 0.Then both x86

install

Qt,including Qt/X 1 1谢t11

qvfb

Qt/Embedded for

and ARM

editons,which are used to develop the order

terminal

application.
to sketch

2.Program order terminal application.Use Qt Designer

the

terminal'
core

graphical interface,and then write the codes,mainly including the realizations of browser class and

primary

window

class,besides

internationalization

and

Chinese—support in the main program.Test the application through NFS at last. 3.Establishing
server

website.Utilize

a

normal

x86 PC running XP OS as the

Web server
design the

with IIS5.1 ASP website.Use DREAMWEAVER and ACCESS2003 to

Web

pages,including Access

Management,Order

Guide,Table Usage,

Menu

List,Order Submission and other functional pages.

4.Debugging

and publishing

application.Utilize YLSBC2440's original kemel

and

root file

system,adding configuration of wireless LAN support,and packing the

Abstract

order terminal application with its library files,the wireless NIC driver and wireless tools into the file system.Finally,transplant them into YLSBC2440 with connection and
run

WLAN

the application.

Key

Words:Qt;Order

System;Software Design

厦门大学学位论文原创性声明

本人呈交的学位论文是本人在导师指导下,独立完成的研究成 果.本人在论文写作中参考其他个人或集体己经发表的研究成果,均 在文中以适当方式明确标明,并符合法律规范和《厦门大学研究生学 术活动规范(试行)》. 另外,该学位论文为( 的研究成果,获得( 资助,在( )课题(组) )课题(组)经费或实验室的 )实验室完成.(请在以上括号内填写课

题或课题组负责人或实验室名称,未有此项声明内容的,可以不作特
别声明.)

声明人(签名):

关巍,叔

如97年多月f日

厦门大学学位论文著作权使用声明

本人同意厦门大学根据《中华人民共和国学位条例暂行实施办 法》等规定保留和使用此学位论文,并向主管部门或其指定机构送交 学位论文(包括纸质版和电子版),允许学位论文进入厦门大学图书 馆及其数据库被查阅,借阅.本人同意厦门大学将学位论文加入全国 博士,硕士学位论文共建单位数据库进行检索,将学位论文的标题和 摘要汇编出版,采用影印,缩印或者其它方式合理复制学位论文. 本学位论文属于:
(

)1.经厦门大学保密委员会审查核定的保密学位论文, 年




日解密,解密后适用上述授权.

(√)2.不保密,适用上述授权. (请在以上相应括号内打"√"或填上相应内容.保密学位论文 应是已经厦门大学保密委员会审定过的学位论文,未经厦门大学保密 委员会审定的学位论文均为公开学位论文.此声明栏不填写的,默认 为公开学位论文,均适用上述授权.)

声明人(签名):
,

夕I(/,禽,赢

如≯年占月1日

基于Qt和ARM的电子点菜系统软件设计

第1章

绪论

本章主要介绍课题的来源,研究目的和意义,并简要介绍课题所做的主要研 究工作.

1.1课题来源
本课题为自选课题,基于本实验室已有的开发板资源,研究学习电子点菜系 统设计.综合应用Qt开发,嵌入式系统开发技术,WLAN通信技术和ASP网站 搭建技术,实现无线点菜系统整套应用,包括便携式移动终端快速点菜,提交订 单和服务器网站后台处理,方便前台,厨房各处随时共享信息,同时实现数字化 物流和仓储管理.此系统易于推广到一般的PDA(Personal 数字助理1无线应用.
Digital

Assistant,个人

1.2电子点菜系统的发展现状
餐饮业已经发展成为我国的黄金产业,在国民生产生活中扮演重要角色.餐 饮企业做大做强,追求现代化,产业化,品牌化【1】的在进程中,从点菜服务等基 础项目即实现信息化管理,提供更加快速,便捷,透明,卫生的餐饮条件,对其 经营档次,服务质量和管理效率的提高具有重要意义,这就催生和发展了无线点 菜业务. 无线点菜系统近年来发展迅速,从通讯技术上分主要有5种,也即经历了5 个发展阶段【2】2: 1.以红外技术为基础,短距离无线点菜系统.这种系统传送范围通常只有 几米,并且需要与传送对象的红外接U对准才能交换信息【3】. 2.以蓝牙技术为基础,其传送距离能到10米,可应用于有障碍物或对移动

性要求的环境【4】.采用这种技术需安装多个蓝牙基站,造价高,信号不好,安装
不易. 3.以ZigBee等无线收发技术为基础,主要是单片机和无线模块的组合(如 MSP430F147单片机配合nRF2401t5】),多为LCD屏黑白条目显示,只能输入代

绪论

码,不能浏览菜谱,传送速度比较慢,还可能丢失数据.

4.以国际标准802.1la/b/g为基础,该技术采用的频率是国际通用的工业, 科学与医学频段,不需要额外审批就可以采用.发射距离可以达到数百米,带宽
有11Mbps.由于采用TCP/IP协议,丢失的数据会重发,所以数据不易丢失.这

种系统需要在掌上电脑上安装特定程序,采用数据下载机制,比如采用C/S模式 以WinCE操作系统加客户端程序的PDA终端【61.这种情况下需要预先下载菜谱,
实时更新程序和数据库,可能造成掌上电脑与服务器上的数据不完全同步的问 题. 5.同样以802.11a/b/g为通讯基础,但是在软件开发理念有所不同.这种技

术不需要在掌上电脑上实时更新客户软件,所有数据更新都在服务器上进行.掌 上电脑与服务器实行数据同步,不需要烦琐的数据下载机制,不需要掌上电脑上
有很大内存,可以无限制地增加菜品数量,可以在掌上电脑上看到实物图像【71.

任何时候在服务器上修改菜谱,新的菜谱立即在掌上电脑上得到更新.程序的更 新可以通过互联网进行,不需要更新掌上电脑上的程序.顾客还能够通过互联网
了解菜品,预定或者直接下单等.

1.3课题的研究意义
餐饮业已经发展成为我国的黄金产业,在国民生产生活rfl扮演重要角色. 2007年,我国餐饮业发展迈上新台阶,全国餐饮业零售额累计实现12352亿元, 同比增长19.4%,比上年同期增幅高出3个百分点.根据商务部公布的数据,2008 年上半年,全国住宿与餐饮市场持续高增长,零售额达到7207亿元,同比增长 24%,比上年同期增加6.2个百分点.我国餐饮业的快速持续发展,显示出了在 社会需求和经济发展的大背景下,行业总体规模日益扩大,在国民经济巾的地位 和作用明显提升和加强【11.餐饮业是衣食住行巾涉及面最广的行业,而服务管理
质量的参差不齐很大程度上决定了消费档次和利润收入的巨大差异. 随着国民生产生活水平的不断提升,人们对生活质量的要求也越来越高.作

为生活消费必不可少的一部分,餐饮的质量成为衡量生活品质的重要标准.而餐 饮服务质量包括了各个方面,快速上菜,快速结算,便捷订单,透明菜价,菜品 档次,菜品成分,卫生环境和饮食健康成为其不可或缺的内容.显然,从点菜服

2

基于Qt和ARM的电子点菜系统软件设计

务等基础项目即实现信息化管理,提供更加快速,便捷,透明,卫生的餐饮条件, 对餐饮企业服务质量和管理效率的提高具有重要意义. 由于技术的成熟和稳定性,IEEE802.11b已经成为WLAN(无线局域网)市 场上的主流标准而被多数厂商采用l引.这使得基于该标准的网络产品的成本得到 很大的降低,该标准下的多数WLAN产品相互兼容,无需太多的成本投入即可 组建一套完整的无线应用;另一方面,基于ARM和Linux的嵌入式系统,具有 成熟的嵌入式硬件结构和丰富的开放软件资源,优良的性能和广泛的市场定位 19】,这无疑对开发工作和学习研究是一个重大帮助;在GUI(图形用户界面)的 选用上,使用基于C++语言面向对象编程的应用程序开发软件库Ot,它汇集了 丰富的C++类提供开发应用程序用户界面所需要的全部内容110】,具有优良的跨 平台性能和丰富的API函数及开发文档.另外,当前量产的普通PDA和PC机 硬件上已经基本满足点菜系统要求,使自行研发的专用硬件设备不再具有明显的 成本优势.为此,本课题集合IEEE802.1 lb,ARM,嵌入式Linux和Qt开发应 用等技术,利用本实验室已有的YLSBC2440开发板硬件基础,以程序软件的通 用性和易用性为方向,构造能够方便移植到到各种PDA系统的点菜终端程序和 普通PC机的服务器软件,实现整个无线点菜系统.提升餐饮业服务质量和管理 效率,并为自身研究学习嵌入式系统和GUI应用开发提供一个良好的平台.

1.4本课题的主要研究工作
本课题通过研究现有的电子点菜系统的解决方案,以当代广泛应用的 IEEE802.1lb无线WLAN技术为基础,利用实验室现有ARM9为核心的 YLSBC2440开发板,配合购置的TP.Link的TL.WN322G+USB无线网卡组成系 统的点菜终端机,通过无线路由器连接到后台服务器,并在后台服务器上构建服 务网站,处理和管理数据.具体包括以下内容: 1.嵌入式Linux系统开发平台的构建 使用便于软件安装升级的Ubuntu桌面环境的Linux系统,建立基本开发环 境,建立交叉编译工具,安装配置NFS方便程序调试;安装用于程序开发的Qt, 包括用于生成在x86上测试Qt/Embedded程序的qvfb等工具的Qt/X1 1,用于在 x86上测试目标程序的Qt/Embedded x86版本,以及用于生成开发板(点菜终端

绪论

机)运行库文件的Qt/Embedded ARM版本.
2.点菜终端程序设计

首先利用Qt设计器规划点菜终端程序的大致界面,然后遵循QT/Embedded 编程一般规则编写代码,主要分为浏览器核心类和主窗口类的实现,并在主程序
中添加国际化和中文支持,编译后通过NFS进行板上测试. 3.服务器网站建设及网页设计

利用安装Windows XP操作系统的普通PC机作为远端服务器,以IIS5.1在
服务器上建立ASP网站,使用DREAMWEAvER视觉化网页开发工具和

ACCESS2003数据库进行网页开发,主要包括登录管理,点菜导航,餐台使用,
菜单列表,选单提交等功能页面.

4.程序调试和发布 在开发板原配内核及文件系统的基础上,内核配置中添加无线网卡支持,根 文件系统中添加点菜终端程序,库文件,TL.wN322G+UsB无线网卡驱动和
Wireless Tools配置管理工具,以及相应的环境和启动设置脚本,烧写入开发板

并连接到WLAN,发布运行程序.

4

基于Qt和ARM的电子点菜系统软件设计

第2章

电子点菜系统方案

本章说明本电子点菜系统的构成和原理,对其硬件组成及软件实现方式分别 进行介绍.

2.1电子点菜系统无线解决方案
参考已有的点菜系统的无线通讯方案,以当前广泛应用的IEEE802.11b WLAN技术为基础,利用实验室现有ARM9为核心的YLSBC2440开发板,配 合购置的TL.WN322G+USB无线网卡组成系统的点菜终端机,通过 TL.WR340G+无线路由器连接到后台服务器,构成无线局域网(WLAN);另一 方面,在后台服务器上构建服务网站处理和管理数据,终端机通过该WLAN以

Browser/Server的模式与服务器交互,进行点菜相关操作,构成整个电子点菜系
统,如图2.1所示.

I

Web 3

l服务器
I

I无线路南器
图2-1电子点菜系统硬件结构图

2.2点菜终端机的组成
2.2.1点菜终端机的硬件平台
在本系统中点菜终端机的硬件平台直接利用优龙公司开发的ARM9开发板
YLSBC2440.

5

电r点女系统自案

t蜒t^

膏强鞠m

LCD接口

lo扩矗口撮■*&口

;l~

盯口 蕾

棱心板 电潭开*

5V电鼍 o¨q^目*口

I艏《l

l

复位按键

功篱按键

图2.2开发板接口资源

表2-1 YLSBC2440开发板主要硬件资源

部件
中央处理器

说明
三星¥3C2440A,}频400MHz SDRM:"M

外部存储器
NAND Fish:64M

网络接口

CS8900Q3,10M
USBll

HOST,1个 SLAVE,1个

USB接口
USBll

SD接II,1个
存储接口 IDE接口,1个

LCD和触摸屏接l{4线电阻式触摸屏接口 调试及下载接口
串口 电源接口

20芯muki—ICE标准JTAG接口 标准RS232串口
5V

基于Qt和ARM的电子点菜系统软件设计

ARM(Advanced

RISC

Machines)公司是1991年在英国剑桥成立的半导体设

计公司,是一家知识产权(IP)供应商.它本身不生产芯片,通过转让设计方案 由合作伙伴生产各具特色的芯片111】.常见的ARM处理器是半导体公司基于ARM 的处理器核或处理器为核心,针对某一应用领域的再开发芯片.ARM9作为一种 嵌入式系统处理器,具有高性能,低功耗,低成本等优点,占领了很大部分嵌入 式市场f1 21. YLSBC2440开发板使用三星公司的ARM9核¥3C2440A处理器,主频为 400MHz,该开发板提供了丰富的硬件接口和触摸屏,如图2—2,表2—1【13】所示, 满足本点菜终端机的硬件需求. 另外,购置TP.Link的TL.WN322G+USB无线网卡,连接到开发板USB HOST口,实现点菜终端机的无线通讯功能.

2.2.2点菜终端机的软件构成
在软件构成上,点菜终端机在开发板原配的已经实现板载模块(表2.1)驱 动的Linux2.6操作系统的基础上,在内核配置中添加无线网卡支持,根文件系 统中添加点菜终端程序,库文件,TL.WN322G+USB无线网卡驱动和Wireless Tools配置管理工具,以及相应的环境和启动设置脚本. 点菜终端程序orderBrowser使用Qt进行开发,遵循Qt/Embedded程序的一 般实现结构机制(如图2.3)在点菜终端机上实现点菜程序功能.

Qt,Embcddcd Application(orderBrowser) QWSServer

cl瓣(服务类库)I
F陋mcbu衢l

Qt/Embcdded Framework(服务类痒)
Drivers of Input Devices Linux

Kernel(I勾核)

Hardware(硬件系统)

图2-3 Qt/Embedded实现结构

7

电子点菜系统方案

Qt是一个多平台的C++图形用户界面应用程序框架.它提供给应用程序开 发者建立艺术级的图形用户界面所需的所用功能.Qt完全面向对象,易于扩展, 能够实现真正的组件编程.

Qt/Embedded即q的嵌入式版本,它在原始Qt的基础上,做了许多出色的
调整以适合嵌入式环境.Qt/Embedded应用程序可以直接操作内核帧缓冲,节省

内存,可移植性好,在快速化和小型化上有很大的提升,而被广泛地应用于各种
嵌入式产品和设备中,从消费电器(如智能手机,机项盒)到工业控制设备(如 医学成像设备,移动信息系统等).

2.3远端服务器网站
远端服务器上建立的点菜系统网站是整个点菜系统的中枢,是提供点菜终端 机初始菜单信息,餐台初始信息以及处理点菜终端机传回数据的总后台,任何菜 单信息,餐台使用,选单提交等信息的更新处理实际上都是在服务器上完成. 具体地,利用安装Windows XP操作系统的一般PC机作为远端服务器,以 IIS5.1在服务器上建立ASP网站,使用DREAMWEAVER视觉化网页开发工具 和ACCESS2003数据库进行网页设计开发,实现用户登录认证和餐厅数据库操 作的相应功能,主要包括登录管理,点菜导航,餐台使用,菜单列表,选单提交 等功能页面.

2.4无线局域网构成
为了实现IEEE802.1ib协议的WLAN,首先需要一个无线AP(Access Point, 无线访问节点)【141,这里使用TP—Link的TL.WR340G+54M无线宽带路由器;点 菜终端机以实验室现有的ARM9核心的YLSBC2440开发板为基体,通过购置的 TP.Link的TL.WN322G+USB无线网卡,连接到开发板的USB HOST端口,在 内核支持,驱动程序,无线管理工具的配合下,点菜终端机便能够接入WqL340G+ 路由器进行无线通讯,连接到远端服务器,进行点菜操作,餐位管理,更新服务 器信息,如图2.4所示.

8

苎J.垡型!型塑生王生垂至堑墼盟堡!!

图2.4系统无线连接

嵌入式Linux系统开发平台

第3章

嵌入式Linux系统开发平台

利用x86架构的普通PC主机,安装Ubuntu7.10的Linux操作系统,建立嵌 入式Linux系统开发平台,并分别编译安装Qt/X1 1,Qt/Embedded的x86和ARM 版本,实现QVEmbedded开发环境.

3.1开发环境选择
xll桌面系统的选择
目前已有的多种基于GNU/Linux的操作系统,如Debian,SuSE,Gentoo,

3.1.1

RedHat和Mandriva等,其中Debian是一个广受称道,技术先进且有着良好支持 的发行版.Ubuntu基于Debian之上,创建了一个可以为桌面和服务器提供最新 且一贯的Linux系统【15】15.Ubuntu囊括了大量从Debian发行版精挑细选的软件 包,同时保留了Debian强大的软件包管理系统,以便于简易的安装或彻底的删 除程序.与大多数发行版附带数量巨大的可用可不用的软件不同,Ubuntu的软
件包清单只包含那些高质量的重要应用程序,并且项目每6个月就会发布一个版

本,以提供最新最强大的软件. Ubuntu支持各种CPU架构,包括x86(Intel 386/486/Pentium处理器和AMD Athlon/Duron/Sempron处理器等),AMD64(Athlon64/Opteron等,以及PowerPC
(iBook,Powerbook,G4,G5)等.Ubuntu沿袭Debian的apt,这是Ubuntu

最重要和最依赖的特性.当需要安装软件时,只需要在命令终端里输入命令
apt.get install XXX

XXX,或者进入新立得软件包管理器,搜索选择需要的软件,勾

选,应用,Ubuntu便能够根据包的依赖性自动选择其他需要的软件包下载,安

装,配置.Ubuntu项目完全遵从开源软件开发的原则,属于免费的自由软件, 任何人可以任意方式下载,修改和使用.使用人数众多,网络资源丰富,便于迅 捷和高效的开发应用.基于此,开发平台采用Ubuntu7.10桌面系统. 查看所使用的Ubuntu版本:
¥lsb release.a

10

基于Qt和ARM的电子点菜系统软件设计

输出:
Distributor ID: Description: Release: Codename: 7.10 gutsy Ubuntu Ubuntu 7.1 0

查看所用Linux内核版本[1 6】:
¥uname叶

输出:
Linux gege—desk-top 2.6.22·14一ge饿棘c

网络资源是系统开发的重要途径,而网络质量决定了对网络资源的有效利
用,而厦门大学具有一个Ubuntu的更新镜像源,作为本校用户刚好可以充分利

用该优势.编辑更新源列表,增加厦门大学更新服务器(教育网).
¥sudo cp/ere/apt/sources.1ist/etc/apt/sources.1ist._bak ¥sudo gedit/etc/apt/sourees.1ist

在sources.1ist文件巾添加如下内容17: 槲教育网更薪源:厦门大学更新服务器:

deb邱://ubuntu.realss.cn/ubuntu/gutsy

main restricted universe multiverse restricted universe multiverse

deb邱://ubuntu.realss.cn/ubuntu/gu研-backports

deb ftp://ubuntu.realss.cn/ubuntu/gutsy—proposed main restricted universe multiverse

deb卸://ubuntu.realss.cn/ubuntu/gutsy—security

main restricted universe multiverse

deb ftp://ubuntu.realss.cn/ubuntu/gutsy—updates main restricted universe multiverse deb-src ftp://ubuntu.realss.cn/ubuntu/gutsy main

restricted

universe multiverse

deb-src ftp://ubuntu.realss.cn/ubuntu/gutsy—backports main restricted universe multiverse deb-src ftp://ubuntu.realss.en/ubuntu/gutsy—proposed main restricted universe multiverse

deb-src卸:llubuntu.realss.cn/ubuntu/gutsy—security main

restricted universe multiverse

deb·SrC flp://ubuntu.realss.cn/ubuntu/gutsy—updates main restricted universe multiverse

保存文件后,更新系统.
Ssudo apt-get update

嵌入式Linux系统开发甲台

3.1.2

GUI图形用户界面选择 Qt足一个多平台的C++图形用户界面(GUI)应用程序框架,完全面向对象,

易于扩展,能够实现真正的组件编程.Qt工具包是一个C++类库,并且是使用

"一次编写,随处编译"的方式用于构建多平台图形用户界面程序的一套工具【18】. Qt使程序员通过使用一个单一源程序来构建应用程序,而该应用程序经过相应
的编译器和库编译就可以运行在Windows,Mac 和其它使用X11的Unix版本【19】.
OS X,Linux,Solaris,HP.UX

q的版本按照不同的图形系统来划分,基本有pnq个版本:Win32版,适用 于Windows平台;Mac版,适合于苹果Mac
用了X系统的各种Linux和Unix平台; (framebuffer)的Linux平台.
OS

X操作系统;X11版,适合于使

Embedded版,适合于具有帧缓冲

Qt/Embedded是q的嵌入式版本,它在原始Qt的基础上,做了许多出色的
调整以适合嵌入式环境.同Qt/X11相比,具有相同的应用程序编程接El,而 QffEmbedded不需要X server或是Xlib库,采用framebuffer作为底层图形接口,

节省内存.Qt/Embedded的应用程序可以直接操作内核framebuffer,在快速化和
小型化上有很大的提升.Qt/Embedded可移植性好,支持多个GUI平台的交互开

发.现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备,如智能手机, 机项盒等消费电器及医学成像设备,移动信息系统等工业控制设备【201.因此本系 统选择Qt/Embedded开发点菜终端机的图形用户界面.

3.2建立开发环境
3.2.1基本开发环境
Ubuntu的默认安装不带有开发环境,故需要手动安装.
¥sudo apt—get install build-essential

build.essential的安装包括gcc,make等基本开发工具,实现了基本的开发 环境.

12

基于Qt和ARM的电子点菜系统软ft:设计

表3-1 Qt4.5支持平台和编译工具列表
键尹一j"…一"………"……~
; 壤%….

os
~…?,

Architectllre

Makespee
aix-xlc

Compiler version(s)
)dC 6

AIX

PowerPC

AIX

PowerPC

aix.xlc.64

xlC 6

HPUX

PA,RlSC

hpux-acc幸

A.03.57(aCC 3.57)
GCC 3.4,4

HPUX

B气,RISC

hpux一酽斗 qws/linux-arm一酽斗 qws/linux-x86一到斗

Embedded Linux

ARM

GCC 3.4,4.1,4.2,4.3

Embedded Linux

Intel 32.bit

GCC 3.4,4.1,4.2,4.3

LinUX

Intel

32/64-bit

linux-‖_卜
linux··icc(see note)

GCC 4.1,

4.2,4.3

LinRX

Intel 32/64·-bit

icc 10.1

Intel 32/64.bit,

MacOSX
PowerPC

macx-酽斗

GCC 4.0.1

SP|ARC, Solaris Intel 32.bit solaris.CC* Sun CC 5.5

SPARC, Solaris 32.bit

Intel solaris-g++木 GCC 3.4.2

Windows XP/Vista Windows XPn,ista Windows XP,Ⅵsta Windows
XP/vista

Intel

32/64-bit

win32一酽斗
win32.ice

GCC

3.4.2(MinGW 5.1.4)
iCC9.1

Intel 32/64.bit

Intel 32/64.bit

win32.msvc2003

Visual Studio 2003

Intel 32/64.bit

wird2.msvc2005

Visual Studio 2005

Windows

XP,vista

Intel 32/64.bit

win32.msvc2008

Visual Studio 2008

Intel 32.bit,

Windows CE ARMv4i,

wince*.msvc2005

Visual Studio 2005

MIPS

Intel 32一bit,

Windows CE
ARMv4i,

wince*.msvc2008

Visual Studio 2008

MIPS

13

嵌入式Linux系统开发甲台

3.2.2建立交叉编译工具 由于本系统足要在x86的架构上编译安装在ARM架构的点菜终端机上运行
的程序,需要安装toolchain交叉编译工具. 查看需要编译的Qt版本说明,打开Qt4.5参考文档(Qt
Reference

Documentation,在线网址是h.ttp://doc.trolltech.com/4.5/index.html),点击General.>
Supported

Platforms,查看其支持的平台和编译工具,如表3.1所示.
3.4,4.1,

本系统目标平台为ARM,据此表得知其支持的编译器版本为GCC

4.2和4.3,这里选择GCC 4.1.0,利用crosstool建立交叉编译工具arm.1inux.4.1.0. 步骤如下【21】: 1.下载crosstool0.43至U/usr/local/arm目录.
(http://www.kegel.com/crosstool/crosstool-0.43.tar.gz)

2.进,k./opt目录解压crosstool.0.43.tar.gz,得至U/opt/crosstool0.43文件夹.
¥tar-xzvf erosstool-0.43.tar.gz

3.为了方便后面的操作,将crosstool0.43更名为crosstool.
¥mv crosst001.0.43 crosstool

4.修改crosstool所属用户为当前用户,使用户获得对crosstool的相应权限.
¥sudo chown—R gege:gege crosstool

5.进入crosstool文件夹,由于采用的开发目标系统为¥3C2440,所以选用
demo.arm9tdmi.sh,并根据需要进行相应修改.
#!/bin/sh 孬This script has
one

line for each known working toolchain

稃for this architecture.Uncomment the one you want.
群Generated by generate-demo.pl from
set-ex

buildings/a11.dats.txt

TARBALLS_DIR=/usr/local/arm/downloads

RESULT_TOP=/usr/local/arm/crosstool
export TARBALLS—.D1R RESULT——TOP GCC_LANGUAGES="c,C-l-I-" export GCC_LANGUAGES 群Really,you should do the mkdir before running this, 拌and chown/opt/crosstool to yourself
so

you don't need tO

run

as

root.

14

基于Qt和ARM的电了点菜系统软件设计

mkdir—P

SRES阮C及炉

#eval'eat arm9tdmi.dat gee-3.2.3-glibc-2.2.5.dat,sh a11.sh—notest #eval'cat armgtdmi.dat gee-3.2.3-glibc-2.3.2.dat,sh a11.sh-notest #eval,cat arm9tdmi.dat gcc-3.2.3-glibc一2.3.2一tls.dat,sh a11.sh-notest #eval,eat arm9tdmi.dat gee·3.3.6-glibc一2.2.5.dat'sh a11.sh一一notest #eval'cat arm9tdmi.dat gee一3.3.6一glibc一2.3.2.dat,sh a11.sh-一notest #eval'cat arm9tdmi.dat gcc-3.3.6-glib,:一2.3.2-tls.dat'sh a11.sh-notest #eval,cat arm9tdmi.dat gee-3.4.5一glibc-2.2.5.dat'sh a11.sh一-notest #eval'cat arrn9tdmi.dat gee一3.4.5-glibc-2.3.2.dat'sh a11.sh—notest #eval'cat arm9tdmi.dat gcc一3.4.5-glibc一2.3.2一tls.dat,sh a11.sh~notest

#eval,cat arm9tdmi.dat gee-3.4.5一glibc-2.3.5.dat'sh a11.sh-一notest #eval,cat arm9tdmi.dat gcc一3.4.5-glibe一2.3.5-tls.dat'sh a11.sh--notest
#eval,eat arm9tdmi.dat gee-3.4.5一glibc一2.3.6.dat'sh a11.sh一-notest #eval'eat arm9tdmi.dat

gcc-3.4.5一西ibc一2.3.6一tls.dat,sh

a11.sh—notest

#eval'cat armgtdmi.dat gee一4.0.2·glibc·2.3.2.dat,sh a11.sh-一notest #eval'cat arm9tdmi.dat

gcc一4.0.2一舀ibc一2.3.2-tls.dat,sh

a11.sh--notest

#eval'cat arm9tdmi.dat gccl4.0.2-glibc一2.3.5.dat'sh a11.sh—notest #eval,cat arm9tdmi.dat gcc一4.0.2一glibc-2.3.5-tls.dat'sh a11.sh一-notest #eval,eat arm9tdmi.dat gcc4.0.2一glibc一2.3.6.dat'sh a11.sh·-notest #eval'eat arm9tdmi.dat gcc-4.0.2一glibc·2.3.6-tls.dat'sh a11.sh一-notest #eval'cat arm9tdmi.dat gee-4.1.O-glibc一2.3.2.dat,sh a11.sh—notest eval'eat armgtdmi.dat gcc-4.1.O-glibc一2.3.2-tls.dat,sh a11.sh—notest

oeho Done.

其中,TARBALLS DIR,工具源码压缩包的存放的目录;RESULT TOP,生成

的工具链的存放目录,需要执行用户有写权限;仿照注释掉的"#eval'cat
armgtdmi.dat gcc.3.2.3.glibc.2.2.5.dat'sh a11.sh-notest"等语句,根据自己的需要

将倒数第二行的语句进行相应的更改,这里是
gcc.4.1.O-glibc.2.3.2.tls.dat,sh a11.sh.-notest''【22】.

"eval'cat arm9tdmi.dat

6.建立下载文件夹downloads,并下载相关文件到该目录. 根据前一步采用"eval,cat arm9tdmi.dat
gcc一4.1.0.glibc-2.3.2一tls.dat,sh a11.sh

-notest",修改gcc.4.1.0一glibc一2.3.2.tls.dat内容:

15

嵌入式Linux系统Jr发平台

BlNUTILS DIR=binutils.2.1 6.1 GCC CORE DIR=gec一3.3.6 GCC DIR=gce-4.1.O GLIBC DIR=glibe.2.3.2 LlNUX DlR=linux-2.6.1 2 LlNUX

SANIT亿ED

HEADER DIR=linux.1ibc.headers.2.6.1 2.0

GLIBCTHREADS_FILENAME=glibc-linuxthmads一2.3.2
GDB—DIR29db-6.5

GLIBC_EXTRA_CONFIG="SGLIBC EXTRA—CONFIG —enable—kernel=2.4.1 8"

—with—tls

-with-一thread

其中包括了用于生成针对目标系统的二进制辅助工具的binutils,用来生成针对

目标系统交叉编译器的gcc,提供用户程序所需要的一些基本函数库的glibc,以 及目标系统的linux内核头文件等,其rfl务必保证glibc和内核源代码的版本与目 标开发板使用的版本保持一致.
crosstool在安装期间将从网络下载以上文件到前面设定的¥TARBALLS 目录,为此先建立此目录:
¥mkdir/usr/loeal/arm/downloads DIR

为了提高安装速度,预先下载这些文件并转移到downloads. 7.修改编译工具名称. 默认编译生成的gee文件名为arm.9tdmi.1inux.gun-gcc.bin,为方便使用改为 arm.1inux.gcc.bin,编辑文件arm9tdmi.dat:
¥gedit ann9tdmi.dat

修改为:
KERNELCONFIG='pwd'/arm.config TARGET=arm.1inux

GCC_EXTRA_CONFIG="一with—cpu=arm9tdmi--enable-cxx-flags=-mcpu=arm9tdmi"
TARGET—CFLAGS="-O"

即将TARGET一项从"arm.9tdmi.1inux.gnu"改为"arm—linux" 8.最后编译. 进入crosstool目录,输入./demo.arm9tdmi.sh开始编译.
¥cd crosstool ¥./demo.arm9tdmi.sh

16

基于Qt和ARM的电子点菜系统软件设计

编译历经数小时后成功在¥I迮SULT TOP即/usr/local/arm/crosstool下得到
arm—linux—gcc.bin.

9.安装该工具链到系统中以待使用.
¥./arm—iinux-gcc.bin

使用时再将得到的bin目录添加到¥PATH环境变量中. 另外,也可以直接使用ARM官方推荐的交叉编译工具Sourcery GH
Lite

Edition for ARM(http://www.codesourcery.com/gnu__toolchains/arm/download.html)

选择GNU/Linux的一栏,

下载最新版本.

这里下载的是

arin一2008q3—72.arm—none.1inux—gnueabi—i686.pc.1inux.gnu.tar.bz2,这是已经编译好 的版本,解压即可使用.

3.2.3安装配置NFS

NFS(Network File System,网络文件系统)可以通过网络将分享不同操作

系统不同主机的目录——通过NFS挂载远程主机的目录,可以像访问本地目录
访问该目录.程序运行调试时,不必每次都烧写到开发板,只要通过NFS挂载 PC主机上的相关目录到开发板,开发板操作系统可以直接调用该目录文件,程

序测试成功再进行实际烧入.
1.安装NFS.
¥sudo apt-get install nfs—kemel—server

安装nfs.kernel.server时,apt会自动安装nfs.common和端口映射服务 portmap(NFS是一个RPC服务程序,在使用之前,要通过portmap映射好端口o 2.配置portmap和NFS.
¥sudo dpkg-reeonfigure portmap


对Should

portmap be bound to the loopback

address?选N,使不局限于内部.

设定允许portmap服务的主机hosts.allow:
¥sudo gedit/etc/hosts.allow

编辑其内容,开放192.168.2.木的ip段主机的访问: 辫桴NFS DAEMONS
portmap:1 92.1 68.2. 10ckd:192.168.2.

17

嵌入式Linux系统开发甲台

rquotad:1 92.1 68.2. mountd:192.168.2. statd:192.168.2.

设定拒绝portmap服务的主机hosts.deny:
¥sudo gedit/etc/hosts.deny

编辑其内容,禁止除了hosts.allow所列以外的用户对portmap的访问:
存堋NFS DAEMONS
portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL

配置NFS挂载目录及权限/etc/expons:
¥sudo gedit/ete/exports

编辑其内容,允许192.168.2.木的主机共享/usfflocal目录,其中参数nⅣ使用户拥
有对该目录的读写权限,参数noroot_squash使用户拥有对这个共享目录的root 最高权限:
#/nfs

宰(rw)

/mr/local 1 92.1 68.2.*(rw,sync,noroot_squash)

更新共享资源,重启portmap进程和NFS服务,使得配置生效:
¥sudo exportfs一. ¥sudo/etc/imt.d/portmap
restart. restart

¥sudo/btc/init.d/nfs.kernel.server

3.本机测试NFS. 这里本地主机IP地址1 92.1 68.2.2,将/usr/local挂载至U/mnt:
¥sudo mount 1 92.1 68.2.2:/usr/local/mnt

进入/mnt目录可以看至0/usr/local的目录内容,说明NFS成功安装.

3.3

Qt安装 Qt程序在嵌入式应用上的开发,需要使用Qt的几个版本协同作业——编译

Qt/Embedded的ARM版本,用于生成应用程序在目标机上运行所需的库文件; 编译安装Qt/Embedded的x86版本,生成在x86开发平台上运行的库文件,通过
18

基于Qt和ARM的电子点菜系统软件设计

qvfb(虚拟缓冲帧)工具在x86上测试Qt/Embedded的目标程序;编译安装Qt/X1 1, 用于生成Qt设计器(Qt desigller)和用于测试QVEmbedded程序的qvfb工具等. 以下为本系统平台使用的Qt版本及其下载地址: Qt/Xl l———-qt-xl l—opensource—src一4.5.0.tar.gz
.http://download.qtsoftware.com/qt/source/qt-x1 1-opensource-src-4.5.0.tar.gz

Qt/Embedde(t—_qt-embedded-linux—opensource—src-4.5.0.tar.gz h丛P;碰鱼Q型n!Q盆d:gl墨Q鱼幽£星:垒Q型g型墨Q世£曼』g!=曼豳垫曼亟遣坌垂=!in丛苎=Qp曼塾墨Q丛!笙曼=墨££兰L至』地
名圣

3.3.1安装Qt/Xll

1.确认gcc编译器已经在环境变量路径上.在终端中输入:
¥gee-V

得到Ubuntu系统已经安装的编译器信息:
使用内建specs. 目标:i486.1inux-gnu 配置为:一/src/configure
-v

一-enable—languages=c,c++'fortran'objc,obj—c++,treelang

..prefix=/usr..enable-shared——with·system—zlib一·libexecdir=/usr/lib一一without—included—gettext -enable.threads=posix ~program—SUffiX=一4.1 -enable.nls -一with-gxx-include—dir=/usr/include/c++/4.1.3

一enable-一cxa—atexit~enable-clocale=gnu一-enable—libstdcxx-debug
i486一linux-gnu

一-enable—mpfr一一enable-checking=release

线程模型:posix gee版本4.1.3 20070929(prerelease)(Ubuntu
4.1.2—1 6ubuntu2)

据此,开发平台上的gcc版本为4.1.3,符合Qt4.5参考文档列出的支持列编译工 具(表3.1),故不需要再对此编译器进行改换,可直接使用. 2.下载Qt/Xll并解压.下载后将其移动到工作目录(这里是 /usr/local/qt/qt450,确定该目录属主为当前用户,确保当前用户对该目录的使用 权限以防后续权限问题再解压:
S cd lusr/locallqt/qt450

¥tar-xzvf qvxl 1-opensource—src-4.5.0.tar.gz

3.进入qt4.5.O文件夹,进行配置:
¥cdqt4.5.0

19

嵌入式Linux系统,r发甲台

S./configure

因为是在x86的开发平台上安装Qt,不考虑生成的库文件大小,这里按照Qt的 默认配置【23】,将安装基本的例程和工具,方便Qt学习和程序测试.配置后自动 生成相应的Makefile,需要数十分钟. 4.编译和安装.
Smake

S make install

编译的过程比较漫长,需要数小时.安装也需要数十分钟,如果没有指定安装位 置(配置选项添加..prefix<指定目录>),Qt/Xll将被安装到默认的
/usraoeaVTrolteeh/Qt.-4.5.0目录.

5.测试安装是否成功.进入/usr/localFFrolltech/Qt-4.5.0,由于使用了多个 Qt版本,需要为各个版本编写相应的shell配置脚本以方便使用.
¥cd/mr/Iocal/Trolltech/Qt-4.5.0
¥gedit x861inux.sh

在脚本中输入【24】:
存!/bin/bash

枘t/x11
export export

path

QTDIR=/usr/10caVrroHtech/Qt一4.5.0 PATH=¥QTDIR/bin:¥PATH
LIBRARY_PATH

export LD_LIBRARY_PATH=¥QTDIR/Iib:¥LD 保存退出后执行该脚本:
¥sotlrce x861inux.sh

确认qmake路径是否已在系统变量中:
¥qmake-v

得到对应的安装信息:
QMake
Using version 2.O l
a

Qt

version 4.5.0

in/usr/loeal/Trolltech/Qt-4.5.0/lib

然后测试例程,如图3.1所示,成功运行说明QUXll在x86上已经安装成功.
6.编译qvfb工具.
¥cd tools/qvfb

¥make

得到qvfb可执行文件,留待后用【25】.

兰±空塑!!竺塑生王皇三至堑竺!.堡生



羞F

.

蚤_瓣兰一攀黼一五-瓣兰圣攀攀.一 『"鞠些钆鞘爿 互--一I|l 羹镶~ 冒!喜竺|| 需
:, II
i.,


''

…….

r'

■一'''

图3-1测试Qt/Xll chip例程

1下载Qt/Embedded到工作甘录并解压.
¥cd/usrBocal/q"qt450

Star-xzvfqt-embedded—linux—opensource.5恃4 5

0la r_gz

2进入得到的qt.embedded.1intl=x.opensourcc—s佗一4.5 0文件夹,查看配置选项
帮助信息.

¥cdqt_embeddedlinux—opensource一4
¥/configure—h

5 0

3依据帮助信息,根据需要进行相应的配置.
¥&onfigurc,

一prefix/usfflccal/Trolltech/QtEx86
.release.shared-fast,

4,

·no-pch—no..qt3support-qt-嗣l—sqlite, -no-llbti仟-BO·libmng,

一qt-libjpeg-qt-gif-m-zlib-@libpng.qt-freetype,
.no-openssl nomake examples—nomaketools·no-optimized-qmake, -no—phoBon—no—nis一110-opengl'no—cups, ,webkil,

嵌入式Linux系统开发平台

-nO.xcursor.no.xfixes\ ·no—xrandr.no-xrender I -no-xkb—rio.sm.no.xinerama\ ·no-xshape—no-separate—debug·info t —embedded x86 l -depths 8,16,32一qvfb\ -qconfig local

其中:

一prefix/usr/local/Trolltech/QtEx86_4——指定安装目录 .release-shared——编译成发行版的共享库; .fast——快速安装,只编译需要的库和予目录; 一no.pch——不事先编译头文件 .no.qt3support——不 需对Qt前版本的兼容; 一qt-sql—sqlite——sqlite数据库支持;
..no..1ibtiff

—qt—libjpeg.qt.gif.qt.1ibpng.qt.zli卜支持jpeg,gig
-·nomake examples--nomake tools

png图片格式;

——不编译安装例程和上具;

.webkit——编译webkit模块;
.embedded 一depths

x86——目标平台为x86;

8,16,32——支持8,16,32位的显示颜色深度; local——使用位于src/corelib/global/的配置文件qconfig—local.h,以预

.qconfig

定义的形式自定义配置,这里为使触摸屏环境隐藏光标,编辑其内容改为:
,·幸幸宰幸奉幸奉幸幸幸幸幸幸'I幸幸幸'I幸堆幸幸幸幸幸幸幸幸宰幸幸幸事幸幸幸堆幸幸幸事堆幸幸枣木·宰幸宰聿奉聿宰木奉木书宰乖宰幸掌幸堆宰幸幸幸'|幸宰幸孝牵事幸

qconfig-local
,I奉'I枣木幸幸●幸●·幸木幸枣宰奉'I}木宰难幸拳奉幸幸幸幸奉搴宰幸幸'I幸幸+幸卑幸幸幸幸}幸幸幸|I幸奉宰幸幸lI幸幸幸宰幸宰幸奉幸幸●堆●幸幸幸·幸宰宰幸奉幸/ //Note that disabling more features will produce //compatible with other libqte builds.
a

libqte that is not

#endif//QT_H

基于Qt和ARM的电了点菜系统软件设计

#ifndefQT_DLL
孬defille QT_DLL//Internal #endif

#define QT_QWS_IPAQ I/Platforms where #if
IllOUSe

oarsor

is

never

required.

defined(QT QWS_IPAQ)ll defined(QT--QWS_CASSIOPEIA)\

||defined(QT__QWS SL5XXX)
群define ij}define #endif

QT_NO_QWS

cURSOR AUTO

QT_NO_QWS__MOUSE

配置完成后自动生成Makefile,需要数十分钟. 4.编译和安装.
¥make

¥make

install

编译的过程需要数小时,由于配置选项己将安装文件设置到很小,安装只需要十 来分钟,Qt/Embedded将被安装到指定的/usr/local/Trolltech/QtEx86_4目录. 5.测试安装是否成功.进入/usr/local/Troiltech/QtEx86_4,为其编写相应的 shell脚本以方便不同调用.
¥cd/usr/local/Trolltech/QtEx86_4 ¥gedit Embedx86—4.sh

在文档中输入:
群!/bin/bash #qt/embedded for x86

export

QTDIR=/usr/local/Trolltech/QtEx86__4

export QTEDIR=¥QTDIR export

PATH--¥QTDIR/bin:¥PATH LIBRARY_PATH=¥QTDIR/lib:¥LD_LIBRARY_PATH

export LD

保存退出,然后执行该脚本:
¥s01.1rce Embedx86—4.sh

确认相应的qmake版本和路径:
¥qmake.v

嵌^式Linux系‰月.&r台

得到对应安装信息,说明Ql/Embedded在x86上已经成功安装:
OMake version 2 01a

Usiag.Qtversion

4.5 0in/usr/Iocal/Trolhech/QtEx86 4/lib

6检查之前编译的qvfb r具是否町用.先将qvfb复制到Qt/Embedded安装
文件夹的bin目录下以便直接取用,然后测试例程:
¥叩,吣"10ca岫tlqt450/qt4
5

0/t00l呐vib/qvlb¥{QTEDIR]/bin

¥cd¥fQTEDm)~cm05/ch谛
¥qvvb&

¥/chip-qws

可以看到此例程图像,如图3-2所示.至此,Qt/Embedded的x86版安装完毕.


图3-2 qvfb模拟图像 3.3.3安装Qt/Embedded的ARM版本
1进入01一embedded—linux-opensource一"c-4 0文件峡,删除之前编译产生的
5

中间文件,最终文件(包括Makefile等),恢复最原始的状态.
¥cd qt embedded—linux—opensource
¥makedistclean
SPC

4 5 0

2进行针对ARM平台的相应配置【26】.
¥/configure,

摹于Qt和ARM的电子点菜系统软什设计

-prefix/usr/local/Troiltech/QtEAARM_8|
-release.shared.fast t -pch-no-qt3support·qt-sql—sqlite l

-no-libtiff-no-libmng—qt—libjpeg—qt—gif·qt—zlib-qt-libpng-qt—freetype\
-no-openssl-nomake examples—nomake tools| -no-optimized-qmake-no-phonon\ -no-nis-no—opengl—no-cups| -webkit|

-tlo-xcursor.阶xfixes.no-xrandr\
-no.xrender.no-xkb.no-sm| -no-xinerama—no-xshape—no—separate—debug-info l
—xplatform qws/linux-arm-g-H--embedded arm| -depths8,16,32\ 一no-qvfb| -qt—gfx—linuxfb—qt—mouse—linuxtp| -no—gfx—qvfb—no-kbd-qvfb-no·mouse-qvfb\ -qconfig local

与之前配置不同:

-prefix/usr/local/Trolltech/QtE4ARM_8——指定其ARM版本的安装目录;
.xplatform
.embedded

qws/linux.arm.g++——编译工具类型,使用arm—linux交叉编译器; arm——目标平台为ARM;

.no.gfx.qvfb.no.kbd—qvfb—no.mouse—qvfb——不需要qvfb模拟;
.qt—gfx.1inuxfb——使用linuxfb图像驱动;

.qt-mouse.1inu)【节一使用linuxtp触摸屏驱动.
3.编译和安装.
Smake S make install

经过几个小时,没有出错的话,QVEmbedded将被安装到指定的 /usr/local/Trolltech/QtE4ARM_8目录. 4.测试安装是否成功.进入/usr/local/Trolltech/QtE4ARM_8,为其编写相应 的shell脚本以方便相应环境调用.
¥ed/usr/local/TroUtech/QtE4ARM_8

嵌入式Linux系统丌发平台

¥gedit smallARMlinux 8.sh

在文档巾输入:
存!/bin/bash #qt/embedded for ARM

export PAT.H=/usr/local/arm/4.1.0/bin:¥PATH export export

QTDlR=/usr/iocal/Trolltech/QtE4ARM_8 QTEDIR=¥QTDIR

export PATH---¥t3ITDIR/bin:¥PATH

export LD_LIBRA露艺PATH=¥QTDIR/Iib:¥LD_LIBRARY_PATH

保存退出,然后执行该脚本:
¥source

smallARMlinux一8.sh

确认相应的qmake版本和路径:
¥qmake_v

得到以下信息说明Qt/Embedded的ARM版本上已经安装成功.
QMake
Using version 2.0 1 a version 4.5.0

Qt

in/usr/localfl'olltech/QtE4ARM

8/lib

使用ARM官方推荐的交叉编译工具Sourcery GH

Lite Edition for

ARM的

话,解压arm一2008q3-72一arnl.none.1inux—gnueabi.i686.pc.1inux.gnu.tar.bz2得到 /usr/local/arm/arm-none-linux—gnueabi.由于Qt/Embedded可指定的交叉编译器中 没有名称为arnl.none.1inux—gnueabi的,这里需要以linux.arm-g++为基础进行修 改.首先进入Qt/Embedded的qws目录添加arrri.none.1inux.gnueabi支持.
¥ed/usr/local/qt/qt450/qt-embedded-linux-opensource.src-4.5.Otmkspecs/qws/ ¥cp—r

linux-ann—g抖./ann—none—linux-gnueabi

S Is arm-none-linux-gnueabi

查看arln-none-linux—gnueabi目录,内有qmake.conf和qplatformdefs.h两个文件,

修改qmake.conf,将其中的编译器指定为arln-none-linux.gnueabi.
¥gedit qmake.conf

将其内容修改为:


雾qmake configuration for building with arm—linux-g++

~一 苎±垒塑垒墨竺塑皇三皇薹墨笙鏊壁鲨生


include(…J/commoll/g++.conf)
include(..}一/eommorl/linux.conf) include(.J../eommon/qws.conf)

孬modifications to g++.conf

QMAKE

CC

--'--arm—none—linux.gnueabi.gee

QMAKE_CXX QMAKE
LINK

=arm—none—linux-gnueabi一划呻

---arm-none.1inux.gnueabi.g抖
=arm—none.1inux-gnueabi.到斗

QMAKE_LINK_SI-ILIB

{5f modifications to linux.conf

QMAKE

AR

2

arm-none—linux-gnueabi-ar eqs

QMAKE_OBJCOPY QMAKE ST砒P

.arm-none_linux-gnueabi—objeopy
2

arm.none-linux-gnueabi—strip

load(qLeonfig)

之后按前述步骤,正常地configure,make和make install(如图3-3所示). 相应的,需要为其编写相应的sheII脚本以方便相应环境调用:
撑!/bin/bash #qt/embedded for ARM 雾arm-none-linux-gnueabi

export PATH=/usr/local/arrn/arm--node..iinux-gnueabi/bin:¥PATH

export
export

QTDIR=/usr/local/Trolltech/QtE4ARM_8
QTEDIR=¥QTDIR

export

PA胖¥QTDIR/bin:¥PATH
LIBRARY PATH

export LD_LIBRARY_PATH=¥QTDIR/Iib:¥LD

至此,Qt/Embedded安装完成.

27

图3-3 Qt/Embedded安装过程

基十o【和ARM日勺qTA菜系统软件口"

第4章点菜终端程序设计
使用ot设计器规划点菜终端程序的大致界面,然后遵循QT/Embedded编程 一般规则编写代码,主要分为浏览器核心类和主窗r]类的实现,并在土程序中添 加囝际化和中文支持,最后编泽并通过NFS进行板上测试.

4.1点菜终端程序界面

4.11

Qt设计器 Qt设计器(Qt designer)Qt GUI编程语言一系列工具中的一个,该工具提

供了o【基本的可绘制窗u部件,如QWidget,QLabel,QPushBmmn,QVBoxLayout 等.在设"器中通过鼠标直接拖动这些窗口部件,能够高教,快速地实现GUI

界面的设计,界面直观形象,所见所得四.
在Ubtmtu中安姨好QVXll后,在其bin目录中即有该designer.:】_=具.在该 目录打开控制台,输入:
¥desibmer&

即可在后台启动运行Qt设计器,进入其默认肩动界而,如图4-1所小

墼圈曩匿P 阡零厂]邑室
ll:~.&.I
l E=二:!:'

ll

l

竺=:|i

譬目E=二 l—¥■—!EJJ"目I|
ll

掣蚕匿荽辇誊鲑一

,豳圈墨■ 圜叠■圈曩●■一}l

■■—舡!
图4-IQt设计器

A菜终端程序☆"

4.1.2程序界面构建
选择Main Window进入应用程序丰窗口界面的设计,通过鼠标拖动左边的

窗rq部件到适当位置,添加所需要的菜单,丁具栏,状态栏以及相应的图标等.
构建初步界面,如图4—2.

口盈盘墨雹囡墨盘墨墨墨■■■麟

!盟!塑÷;!!生…——…一 __≮p~o

图4_2构建终端程序界面

4.2点菜终端程序编写
遵循Qt/Embedded编程一般规则编写代码t主要分为浏览器核心WebView
类和主窗【J MainWindow粪的实现,并在主程序中添加国际化和中文支持,虽后 编译并通过NFS进{J板上测试.

4.2.1创建资源文件 在T作目录新建images目录,并将使用的图标资源复制到该目录,然后创 建资源文件sourc.qrc,编辑该文件添加相应的圈标资源,内容如下:
<RCC>
(口resource>

<file>images/enter.png</file>
<file>images/back png</fi]e>

基于Qt和ARM的电子点菜系统软件设计

<file>images/forward.png</file> <file>images/reload.png</file> <file>images/stop.png</file> <file>orderBrowser.qm</file> </qresouree> </RCC>

4.2.2浏览器核心类
在工程内添加头文件webview.h,该文件给出浏览器核心类WebView的声明, 初始化该WebView类,编辑其主要内容如下:
#ifndef

WEBVIEW——H

托efme WEBVIEW—H

#include<QtWebKit/QWebView>

class

WebView:public QWebView

{
public:

WebView0;
private:

QWebView幸createWindow(QWebPage::WebWindowType); };
璃fendif

下面是WrebView类的实现文件webview.cpp,具体定义Wrebview类实现浏
览器核,并于主窗口类MainWindoW中实例化,主窗口函数的中心部件即为 WebView类的实例.
#include"mainwindow.h" #include"webview.h"

WebView::WebViewO { }
.

QWebView幸WebView::createWindow(QWebPage::WebWindowType type)

.

3l

点菜终端程序设计

Q_UNUSED(type); MainWindow*newMainwindow=new MainWindow; newMainwindow->showMaximized0;
return newMainwindow->webView;

4.2.3主窗口类
在工程内添加头文件mainwindow.h,给出主窗口类MainWindow的定义,

首先,MainWindow类直接使用了QMainW'mdow类和QUrl类及其成员,故需要
包含进相应的头文件.
#ifndef MAINWINDOW——H
#define

MAINWINDOW——H

#include<QMainWindow> #include<QUrl>

class

QAction;

class QLineEdit;
class

QLabel;

class WebView;
class

QWebPage;

class QWebHistory; class QProgressBar;

MainWindow继承自QMainWindow类,在其公共区声明构造函数,进行初 始化.
class MainWindow:public QMainWindow

{ Q_OBJECT,
public:

MainWindow0; WebView·webView;

32

基于Qt和ARM的电子点菜系统软件设计

在其私有区,首先声明了指向行文本编辑器,网页文档,网页历史档的指针 成员变量,其次是指向文件操作和网页操作的指向动作的指针,然后是指向文件 菜单,查看菜单和帮助菜单的指针成员变量,以及状态栏部件指针等.
private:
void void void void void

createActionsO; createMenus0; createToolBarsO; createCentralWidget(); ereateStatusBarO;

QLineEdit幸urlAddr; QWebPage幸webPage; QWebHistory章webHistory;

QAction幸openAction; QAction幸exitAction;. QAction宰lockToolBarACtion; QAction簟aboutAction; QAction·backAction; QAetion幸forwardAction; QAction幸reloadAction; QAction幸stopAction;

QMenu*fileMenu; QMenu·viewMenu; QMenu奎helpMenu; QToolBar聿navToolBar; QLabel·statusLabel; QProgressBar木progressBar;
●●●

在MainWindow类的私有槽区,声明了几个返回类型都是void的槽函数, 分别响应载入网页地址,网页操作图标指示,标题显示,工具栏移动性,网页载 入开始,网页载入完成,网页载入进程的操作.

点菜终端程序设计

private slots: void void void void void void

loadUrlAddr0; displayUrlAddr(const QUrl&); showTitle(const QString&); toolBarMovablefb001); webLoadStarted0; webLoadFinished(b001); webLoadProgress(int);

void

};
#endif

下面是主窗121类MainWindow的实现文件mainwindow.cpp,实现程序的交互
过程响应.
#include"mainwindow.h" #include"webview.h"

#include<QtGui/QtGui> #include<QtWebKit/QWebView> #include<QtWebKiffQWebPage> #include<QtWebKit/QWebHistory>

浏览器初始化,并指定启动时的连接网址.
MainWindow::MainWindow0 {
webView=new

WebView;

webView一>load(QUrl("http:/1192.168.2.100/login.asp")); webPage=webView->pageO;
webHistory
2

webPage->history();

urlAddr=new

QLineEdit;

statusLabel=new QLabel;
progressBar
2

new

QProgressBar;

ereateAcfions0; createMenus0;

34

基于Qt和ARM的电子点菜系统软件设计

createToolBarsO; createCentralWidgetO; ereateStatusBarO;

Qt下对象问的通讯使用信号和槽的机制'2引,连接信号和所定义的槽.
eonneet(urlAddr,SIGNAL(returnPressed0),this,SLOT(10adOrlAddr0)); eormeet(webView, SIGNAL(urlChanged(const
QUrl

&)),this,

SLOT(displayUrlAddr(const QUrl&))); eonneet(webView, SIGNAL(titleChanged(const QString
&)),this,

SLOT(showTitle(corlst Qstring&)));

eonneet(webView,

SIGNAL(statusBarMessage(const

QString

&)),statusLabel,

SLOT(setText(const QString&))); conneet(webView,SlONAL(10adStartedO),this,SLOT(webLoadStarted0)); eonneet(webView,SIGNAL(10adProgress(im)),this·SLOT(webLoadProgress(im))); eonnect(webView,SlGNAL(ioadFinished(b001)),this,SLOT(webLoadFinished(b001)));



现在定义新建窗LI动作,并将新窗口初始化.
void

MainWindIow::createActions()

{
exitAction=new

QAction(tr("E&xit"),this);

exitAetion一>setShortcut(tr("Ctrl+X")); eonneet(exitAction,SIGNAL(triggeredO),qApp,SLOT(quit()));

lockToolBarACtion—new

QAction(tr("&LockToolBar"),this);

lockToolBarACtion一>setCheckable(true); eonnect(10ckToolBarACtion, SLOT(toolBarMovable(b001))); SIGNAL(toggledO001)),this,

aboutAction=new

QAction(tr("&AboutQttI),this);

eonneet(aboutAction,SlONAL(triggeredO),qApp,SLOT(aboutQtO));

backAction=IleW

QAction(tr("&Back"),this);

backAetion->setlcon(Qlcon(":/images/back.prig"));

35

点菜终端程序设计

backAction一>setStatusTip(tr("Back"));
backAetion->setEnabled(false);

eonnect(backAetion,SIGNAL(triggered()),webView,SLOT(back()));

forwardAction=new

QAction(tr("&Forwar''1,thiD;

forwardAction一>setleon(Qlcon(":/images/forward.png"));

forwardAction->setStatusTip(tr("Forward"));
forwardAction一>setEnabled(false);

connecKforwardAction,SIGNAL(triggered()),webView,SLOT(forward()));

reloadAction=flew

QAction(tr("&Reload"1,this);

reloadAction一>setlcon(Qlcon(":/images/reload.png"));
reloadAction->setStatusTip(tr("Reload"));

connect(reloadAction,SIGNAL(triggeredO),webView,SLOT(reload()));

stopAction=new

QAction(tr("&Stop"),this);

stopAction->setlcon(Qlcon(":/images/stop.png")); stopAction一>setStatusTip(tr("Stop")); stopAction·>setEnabled(false); connect(stopAction,SIGNAL(triggeredO),webView,SLOT(stop()));

创建菜单,根据需要可以隐藏菜单.
void

MainWindow::createMenusO

{ fileMenu=menuBarO->addMenu(tr("&File")); fileMenu->addAction(exitAction);

viewMenu=menuBarO->addMenu(tr("&View")); viewMenu->addAction(10ckToolBarACtion);

helpMenu=menuBar()->addMenu(tr("&Help")); helpMenu->addAction(aboutAetion);

摹于Qt和ARM的电子点菜系统软件设计

menuBar0->hideO;

创建工具栏,根据需要先隐藏工具栏.
void

MainWindow::createToolBars0

{ navToolBar=addToolBar(tr("Navigation")); navToolBar->addAction(backAction); navToolBar->addAction(forwardAction);
navToolBar->addAction(reloadAction);

navToolBar->addAction(stopAction); navToolBar->addWidget(urlAddr);

removeToolBar(navToolBar); }


定义主窗口的巾心部件,这里是浏览器核心类WebView的实例webView.
void

MainWindow::createCentralWidget0

{ setCentralWidget(webView); }

创建状态栏,根据需要也可以隐藏.
void

MainWindow::createStatusBar0

{ statusBar0->addWidget(statusLabel); statusBar0->addWidget(progressBar); progressBar->setMaximumWidth(1 00); progressBar->hide0;

statusBar0->hide0; }

37

点菜终端程序设计

载入文本域输入的网址.
void

MainWindow::loadUrlAddrO

{ QString url=urlAddr->textO; if(url.1eft(5)!="http:"&&url.1e敞5)!="file:") url.prepend("http://''); webView->load(QUrl(url));

网页操作使能指示.
void

MainWindow::displayUrlAddr(const QUrl&url)

{ urlAddr->setText(url.toStringO); if(webHistory一>canGoBack0) backAction一>setEnabled(true);
else

backAction一>setEnabled(false);

if(webHistory一>canGoForward0) forwardAction一>setEnabled(true);
else

forwardAction->setEnabled(false);

void

MainWindow::showTitle(cop,st QString&title)

{ this->setWindowTitle(title); }

void

MainWindow::webLoadStartedO

{ stopAction->setEnable圮l(true);

38

基于Qt和ARM的电子点菜系统软件设计

}
void

MainWindow::webLoadFinishext(bool ok)

{ if(ok) stopAction一>setEnabled(false); }

工具栏和状态栏设置.
void

MainWindow::toolBarMovable(bool move)

{ navToolBar->setMovable(!move);

>
void

MainWindow::webLoadProgress(int progress)

{ progressBar->show0; statusLabel->setText(tr("loading")); progressBar->setValue(progress); if(100=:=progress) { progressBar->hide0; statusLabel一>setText(tr("load finished"));
'

}

statusBar0->hide0; }

4.2.4程序国际化和中文支持

程序界面编写时使用的足英文,而Qt的程序国际化支持可以方便地实现界 面到中文的翻译. 1.首先在.pro文件加入TRANSLATIONS指令指明要翻译的语言文件.
TRANSLATIONS+=orderBrowser zh_CN.ts

39

点菜终端程序设¨

一般地.语言文件以区域代码结尾来区分,中文的区域代码足zh_CN. 2运行lupdate工具生成工程的翻译源义件orderBrowser_zh_CN
¥lupdaleorderBrowser.pro ts.

3用Qt Linguist打开源文件并输入相应的巾文翻译,如图4-3所示.
SlinguistorderBrowser_zh_CNts&

PB00"‰一

蠹^·●**■£口‰t

兰.
品_

萨f蕉尹—当F—一
4再次运行luDd砒e更新加入的新文本,同步源代码和翻译文件.
¥lupdale orderBrowser.pro

5运行lrelease发布翻译文件,即将ts文件生成为相应的qm文件.
¥Irelease orderBro,;vser.pro

6编辑资源文件SOlUtee arc添加.qm翻译文件.
<file>orderBrowser,qm</file>

7加载翻译文件,即在主程序文件main函数叶l添加如下代码.

QTranslatortranslator; Translator.10ad("orderBrowser_zh_CN'1;
app

1n靠dlT协1slmo"&t阻ns】m叫),

基于Qt和ARM的电子点菜系统软件设计

4.2.5主程序

点菜终端程序的主程序文件main.cpp,其内容如下.
#include"mainwindow.h"

#include<QtGui/QtGui>

ira

main(int argc,char幸argv[])

{ QApplication app(argc,argv); QFont
font;

font.setFamily("unifont"):

app.setFont(fon0;

QTextCodec::setCodecForTr(QTextCodec::eodecForLocaleO); QTranslator
translator;

translator.10ad(":/orderBrowser—zh—CN"); app.instaliTranslator(&translator);

MainWindow'mainwindow

2 new

MainWindow;

mainwindow->showMaximized0;
return

app.execO;



程序首先创建一个QApplication对象,并将用户在控制台输入的参数传递给 该应用程序对象,QApplication对象管理Qt GUI应用程序的控制流程和主要的 设置选项; 字体设置上, 为显示汉字使用

QTextCodec::setCodecForTr(QTextCodec::codecForLocale0),设置QObjeet::tr0使 用的字符集,这里是主机localscale字符集【29】;创建一个MainWindow对象,最 大化显示在输出设备上;最后程序返回Qt应用程序对象app执行的结果,退出. QApplication::exec()语句的执行,将使得Qt GUI进入一个主事件循环,直到 程序中调用exit(),quit()或关闭应用程序的主窗口.主事件循环开始后,它将会 接收用户界面事件以及其他事件源的事件并向相应的窗口进行分发和处理.

41

点菜终端程序设计

4.2.6程序编译

1.首先设置Qt相关变量.这里的目标是ARM环境,使用Qt/Embedded的

ARM版本,利用脚本smallARMlinux
毋!/bin/bash #qt/embedded for ARM

8.sh.

export l'≮l export export

H.叫u刚local/arm/4.1.0/bin:¥PATH

QTDIR=/usr/local/Trolltech/QtE4ARM_8
QTEDIR---¥QTDlR

export PATH=¥QTDIR/bin:¥PATH export LD_LIBRARY

PATH=¥QTDIR/Iib:¥LD_LIBRARY_PATH

2.执行脚本,使环境变量生效.
¥source smallARMlinux一8.sh

3.生成.pro工程文件. ¥qmake呻rojeet

生成以工程目录命名的工程文件,这里是orderBrowser.pro.
4.生成Makefile文件.
5qmake

qmake工具能够根据.pro文件编辑生成编译规则文件Makefile. 5.编译生成二进制文件.
¥make

6.去除可执行文件的调试信息,减小文件大小.
¥arm-linux·strip orderBrowser

7.检验生成的orderBrowser文件类型.
¥file orderBrowser

输出:
orderBrowser:ELF 32-bit LSB

executable,ARM,version
.

1,for GNU/Linux 2.0.0,dynamically

linked(uses

shared

libs),stripped

验证orderBrowser是用于arm平台的二进制可执行文件,使用动态链接库,并且 已经stripped去除了调试信息.

42

基于Qt和ARM的电子点菜系统软件设计

4.3程序测试
在将程序移植到开发板之前先用NFS挂载的形式进行测试,确定是否可用. 1.首先在工作目录编辑脚本onBoard.sh,方便开发板环境变量快速设置.
誊!/bin/bash #qt/embedded path #onBoard

export export export

QTDIR=/usr/local/Trolltech/QtE4ARM QTEDIR--¥QTDIR PATH--¥QlTDIR/bin:¥PATH LIBRARY_PATH=¥QTDIR/Iib

export LD

2.通过minicom终端进入开发板系统mount上程序目录.由于主机开发平

台上Qt/Embedded的安装文件和工作目录项目文件都在/usr/local下,故直接将
整个/usr/local目录进行挂载.
¥mount_o nolock,rw—t nfs 192.168.2.2:/usr/local/usr/local

其中,192.168.2.2为主机ip,即将主机的/usr/local下的所有文件和目录挂载到开 发板的/usr/local目录下;另外,由于开发板的根文件系统中不带portmap,所以 使用.0 nolock参数,即不使用NFS文件锁,避免使用portmap.mount成功后在

开发板的/usr/local下看到主机的整个共享目录,而且两个文件夹内的修改是同
步的. 3.设置环境变量,在开发板上执行onBoard.sh脚本.
¥source onBoard.sh

4.进入程序目录,执行程序.
"

:

¥./orderBrowser-qws

程序正常启动,如图4-4所示.

43

^菜替端程序№计

图4-4启动orderBrowser

基于Qt和ARM的电了点菜系统软什设计

第5章建立服务器网站

利用普通PC机+W'mdows XP作为网站服务器,以IIS5.1建立ASP网站, 使用DREAMWEAVER和ACCESS2003进行具体网页开发.

5.1

IIS

WEB服务器安装

5.1.1

llS互联网信息服务

IIS(Internet Information Server,互联网信息服务)是一个World Wide Web

server,是一种Web(网页)服务组件,其中包括Web服务器,FTP服务器,NNTP 服务器和SMTP服务器,分别用于网页浏览,文件传输,新闻服务和邮件发送等 方面,它使得在网络(包括互联网和局域网)上便捷地发布信息,并且支持 ASP(Active
Server

Pages),JAVA,VBscript产生页面,可以方便地在主流的

Windows操作系统上安装和管理,故此选择IIS信息服务器.
IIS足随Windows
NT Server

4.0一起提供的文件和应用程序服务器,是在
NT Server

Windows

NT

Server上建立Intemet服务器的基本组件.它与Windows

完全集成,允许使用Windows NT Server内置的安全性以及NTFS文件系统建立 强大灵活的Intemet/Intranet站点.

5.1.2安装IlS

IIS的版本应该根据所使用的操作系统进行相应选择,如Windows2000下应 选择IIS5.0,Windows2003下应选择IIS6.0,Windows XP系统应该选择IIS5.1.

本服务器搭建在XP操作系统,故使用IIS5.1.具体安装步骤如下:
1,插入windows xp安装光盘,或者通过网络下载IIS5.1,解压.打开控制 面板,打开"添加/删除程序". 2,在添加或删除程序窗L]左边点击"添加/删除Windows组件". 3,Windows组件向导启动,勾选Internet信息服务(IIs).

45

图5-1IlS的安装

4,安装成功系统会自动在系统盘新建网站目录.默认日录为
C:\Inetpub\wwwroot.

5,打开控制面板性能和维护一管理工具一Internet信息服务.
6,在默认刚站上进行属性设置,

图5-2 IIS属性设置一网站

填写自己的网站名称,本系统为"电子点菜系统",IP选择自己的固定IP地
址.

基于oI和ARM∞电}点菜系统#什慢"

7,主目录栏目卜:更改网站所在文件位置,从默认目录C:\lnetpub\wwvcroot 选择或者新建自己的嘲站史件夹,这里足:D:Vthe Website\OrderSystem.由r浏 览器终端需要对数据』筚进行读写,勾选"写入"属性.

图5-3IIS属性设置一主目录

点击文档:设置嘲站默认首页,添力¨本点菜系统的登入主页login
点击目录安全惟:点击编辑对服务器访问权限进行设置.

asp.

墨;警;雕肌I*一k|一;i髫土I气:;矬
P翟曩-Ⅸmn

:絮昌F型l ]
:;兰".=!二二二i,l
,簧 一
图5-4IIS属性设置.文档

最后进行测试连接.另外,从外部访问时如果出现如F错误,可能是服务器

建t服务%日站

防火墙隔离了当前防问,解决方法足扣开相应端LI(默认是80端口),或者直接 关闭系统防火墙.

口目E日,口口口■lg∞■■■■■■■■■■■■●■■■●■畔,


Q-:t,.☆~

』5

,,./-'=k

鞴蕊瀚 糍銎糕罢署"

黧鬟黼

图5-5测试连接出错

注意设置网站默认首贞,这里添加本点某系统的登录主页login asp,否则可
能出现如下错误.

々 零孽晕=.●._●—..: 管i口i%∞''....一 盏查墨垦曼兰兰兰兰兰些====:二=二1醯 _…4h
li'I,If',l
v

Il…i"r

I)l¨I'd

=四一"'
P

图5-6网站访问出错

!ig!!!型!!!!!!!!!型.
5.2站点设置
5.2.1

DREAMWEAVE站点信息设置

图5.7 DREAMWEAVER站点设置.本地信息

选择站点一管珲站点一新建一高级一术地信息一栏,设置站点名称为"电子
点菜系统"和相应的本地文件灾位置D:\the Website\OrderSystem:测试服务器一

栏,设置服务器模型为ASPVBSCRIPT,访问"本地删络",测试服务器文件夹
的相应位置D:\the Websile\OrderSystem,在本机测试故使用URI.甜缀

"http://localhost/'',完成设置【301.

鼍野孽平2''..."".

{…~

肝黧薰三=.l r……

"I

l

一磊茹互}

l

一~一|

建口服务#H站

创建网站分类立件夹,根据需要,新建datas文件央用于存放数据序文件

新建Dic文件夹存放州页使用的图片等. ACCESS2003数据库建立及网站连接 1在datas甘录中新建数据库order.mdb,创建tadmin数据表,设置BSeITlame 和password字段,存放电子点菜系统的管理用户和相应密码九.

5.2.2

图5-9tadmin数据表

2创建flood数据表,存放菜谱信息.

图5—10flood数据表

3创建tdeskpic数据表,存放餐厅就餐情况和相应的图片信息

苎三望型!!竺塑尘王皇苎至竺竺生墨盐 4创建tsemtI到tseat6数据表.存放相应桌号上椅子是否就坐的图片信息

圈5.12 tseatl数据表

5数据库与DREAMWEAVER的连接『321.打丌DREAMWEAVER软件,选
择窗口

数据库一自定义连接字符串,设簧连接名称,这里是"orderdata". 剖 臣蕾宦譬墨,—■■■■■■——■&l嚣爱_

….tⅢE馥.自月■E■*0±∞%自E月—j墅一
罔5—13数据库连接

髫I}≈目际鬲习面焉鬲i=五鬲FF面_『_而—!生_J

4ig%rz_-————一—j堕—_J
8《月H*tn±∞M自断——!苎—_J —!生_J

点击帮助按丰儿,参考帮助文档,设置连接字符串为"Driver={MicrosoftAccess Driver—mdb)};Uid=;Pwd=;DBQ=D:\the Website\OrderSystem\datas\order.mdb",测 试连接,成功的话,数据库连接完成.
蛊品

口口E=目E口●■■●■■■■■■■■■■●●■■■●■■%…r ~I…iⅧ————————————————————』5 Ⅲ====一J……… {li磊#.一 l=::2∞w…一………""……-……"
脚|

茹爨基+

e蒜惫‰.

¥ii瓣i秽.雠照;舞"一'.

}w%#……一"'…~~一………"

{虢篓::=:o:黧黑剃嚣瓮篇篇篇黑……一
.裂:=.::==:二竞:嚣二篙譬"…………"…

§器o

i誊;渝笋'=…………"……"……'"~……"l l:i薹器拣;兰茹%%∞g四=‰_*……-…
…娑喘=6然:∽=九生 '…….''r¨L h一…uE

|i焉i臻!篓ii譬:!===…~…~
wt_

t…'_E●f一}' 12:=…~…"…"""…' 1…
i._t

.

4———————一』l"

.

图5-14数据库连接帮助

建iⅢ务%月站

5.3点菜系统网页设计
点菜系统网站是整个点菜系统的核心,是对点菜终端机传送过来的数据进行 处理的总后台,主要包含用户认证和数据库操作的相应功能网页,如图5-15所
示.

图5.15点菜系统网站结构

5.3I登录首页

在DREAMWEAVER巾.点击文什一新建一常规.选择动态页旱的ASP VBSCRIPT四,存为login
asp.

—!!!—J』丝墅2_J韭!i±立臣i豆口—里!—J 图5-16新建asp网页

苎!!!型丛竺塑皇!生至!垄壁丛生业

:篙紫.,."
蜷H毪ig,点女g《….一;.圳

^t5""t

45"

"篙票差耋茎茎…1
未兰删,5剿
J

图5一17登录首页

然后添加登录表格和表单.设置网页样式.

考虑到主要用于触摸屏终端f{j户,增加用户JP地址认证功能,为允许范围 的IP用,,分配登录用户名和相应密码. 利用request时象的ServerVariables属性可以获取环境变量的值,舢服务器

主机名称,Web服务器软件名等,这里Reques【ServerVariables(REMOTeADDR)
获取访问者的IP地址,通过它实现JP地址的过滤.此功能主要实现代码:
<% ipstr;Request ServerVariables("Remote_Addr") 向r滓110 3

¨--ri曲t(ipstr.1en(ipstr)一ins'a(I,ipst|.'"))
nexI

ip32len(1ps£Llel】(1psIr)一len(ip4)-i)
lfmsIr="127 00l"or(ip32"i92168

2"andiP4y'100'andip0'200")Then

S吲lanle-.'admin888''
sespwd-"admin988" Else

sesn耕-您的ffJp名一
sespwd="《的密码"

EndIf %>

建Ⅱ服§8目站

首先使用Request ServerVariables("REMOTE—ADDR")得到访问者的IP地址 并保存在变量ipstr中,iD4获取IP地址的第四段,ip3获取iP地址的前三段,然

后分别判断苴值.为简单起见,IP在允许范闸的话直接赋予管理用户名和密码,

交后续的登录用,1服务器行为处理.选择服务器行为,添加用户身份验证一登录

用户,连接到数据库的诅'蛐表,如图2一l所示.
口雹盈■●■■■■■■■—■—■■_g;

"篓=臣=二i] 月P¥}&l…--
=J

鹕*§『i==万————]

∞t■tⅡl—d.L-

.雾
■M

∞■tt四E=;ilir——————— r#蚰~豫2#《,
t酬¨…o
二I

#.|L… 目Pgwl…-·

■ -J 一

自■t■蚺·'咧£=■:i————————一雠
tf"T辆≈口日口月P¥∞蜘

1

:0嚣:罂娑!L_]
8蚴Ⅲ目.L—rt
J

图5.18服务器行为.用户验证

5.3.2点菜导航页

图5.19导航页

4十01日ARM的自子^*系%轼件☆"

如图5-19,登录成功后转至Frameset html,其包含mainFrame和rightFrame 左右两个框架.mainframe为就餐大厅餐位信息页面hall asp,桌子和椅子均毗

动态幽标表示空闲与否:咄htFrame为点菜管理导航页面guide 8sp,可蛆快速转
到餐位信息页面hall 4sp,柒争梦Ⅱ表页foodlisic asp,退台结算页checkout asp,鹭
出管理页logout asp等.

5.3.3开台入座页

点击hall唧页面里的桌位,传递相应桌号进入checkip asp入座t设置伞局
Session桌号信息锁定所选桌位1341.主要实现代码如下:
<%Session("deskcd"1=0
IfRecordsetl

FieldsItem("胪&request("desked""Value…1desk"&request("desked")&…0

Then

Session("desked"Prequest{"desked")ResponseRcdirectt"ofmainFramehtnd""枷
(%Else cmsg-"本桌已有客人计{餐.清返¨重选"%> <%End If%)

5.3.4菜单列表页
根据选择的桌号进八相应桌位的菜单选择页面ofmainFrame himl,包含两个 框架,midFrame里足菜单列表页foodlist asp,leftFrame里足选定项柴单详情页
showfood

asD,绑定到flood数据表,重复菜单信息区域以列出全部菜单信息,

设置下拉列表选择人数,设置复选框用丁:勾选订单.

害%'%:"2f"鬯

筮露强利 -到Ⅲmg四l

一…虬!王垒

匿蝥商
图s.20菜单列表页

5.3.S选单提交页

makefoodlist.asp,获取从showfood asp表单复选框传递的订单id的集合以及 人数信息写入全局变量.

"
Sessionf"orderlisl")=Request Forel("bilbao"】 So.ion("renshu")2Request F(m""rcnshu"】 %'

设置命令1更新数据库tdeskpic数据表,记录人数renshu和订单集orderlist- 并设定选定桌位为被占,即将选定桌位图标改成已占标示.

口●■■■■■—■_!一 i薰三:竺茎星掣型
m日iii-—————————————一一1—=一

"

P?一"…""""…"

:

, 唧匿甄———_
蒿要在代码视图下添加:
<%

lR"m"&Session("desked").…"thenCommandI if(Session("renshu")."")thenCommandl

mzhuohao=…m.&Session("desked")
listzhuohao"list"&Sessio蚪desked")

renshu2Session("renshu")

…list.'&Session("desked")o…'JthenCommandl
if(Session("ordcrlist'').…')thenCommandl

orderid=Session("orderlist")

j"D"&Sessi∞("desked")o"")thenCommandl—Dpic=…D'&S目slon("desked") "desk"&Session("deskcd")&…1
"desk"&Sessio叫仃desked"1&"1. %》

o

"")then

Commandl—deskxx

2

堑垒!!型!!!!!!!!!塑
"

setCommandl=se眦c嗍eo蜥e州"ADODBCommand")
co一∞d1¨^.ctiveCoaneetion=MM_orderdala
Commahdi CommandText="UPDATE tdeskpic STRING

SET"+Replace(CommandImzhuohao,…,
Dpic,"".,…".)+

……1+'b'一+Replace(CommandI

renshu,…HI…..)+","+Replace(CommandIlistzhuohao,"…
2

m'"1+"d"+Replace(Command]_ofcierid,"…,…'.)+…,'.+Replace(Comm卸dI
''d"+Replace(CommandI—deskxx'…i…"+)+…WHEREid
Commandl CommandI CommandType;1 CommandTimeout=0 Prepared2tvoe I"

Comm蛐dl

Commandl.Ex∞ute0
%>

设置命令2更新desknura表,设定人数相应的座位为被占,叩将选定桌位上 的座椅按入座人数更新为被占图标.

图5-22更新desknum表 添加代码:
鹤'Dimi%》
(%Dim renshu%>

<%ifRequest.Form("renshu")oOthen

renshu2Request

<%if一一tseat"&Session("desked.').""then
%)

CommaTld2—desknum…tseat&Session("desked")

Form("renshu")%>

《%forl=lto renshu

e静
scaJmum-"¥"&I%'

《%if一.s-.&j夺"thenCommand2

堡兰里量壁旦些
竹6
seI

Command2=Server,CreateObjeet(.ADODB Command"1

Command2

ActiveConnectI—MM

orderdala STRING desknum…""….1+"SET"+ id2I"

Command2CommandText2"UPDATE"+Replace(Command2

Replace(Command2

seamum.""_."…')十"=pic/seatl glr WHERE

Command2 CommandType=I Command2CommadTimeout=0 Comm帅d2
Command2 Prepared=true

Executm

%) <%,len%'

5.3.6选定菜品页 创建选定菜品页orderedfoodlist asp,根据选定的菜单id集合罗列选定柴品
确认提交订单.

』躏!蜘:d_-J神一
o

o

i

P…"_p_H"H"H一…—1
o& ∞o

;此札o'一强

粪藁篓-!-!-蘸曼呈三型

l…f"

图5_23选定菜品列表页 5.3.7遇台结算和登出管理
退台结算页checkout aspt需要将选单提交页makefoodlistasp中对数据库的

更改进行还原,首先足全局变量的重置,包括选单jd集orderlist,选定桌号desked, 人数renshu等.

§十o【和ARM的电子点菜系统软件*计

%
IfScsslon(.'desked",=oThen
ResponseRedirect("Frameselhtml")
EndIf

%>

%
Session("renshu"1=0 Sessio""orderlist"P""
o/c>

<%

Session(.'dcskcd")-0
%>

重置数据库td船kpic表,清空选定桌号的人数renshu,四orderlist,还原选
中间需要将makefoodllst.asp中对数据库的更新重置.与原操作相反,命令1 定寨位的空出图标,即将选定桌位图标还原成未占标示.

图5-24重置"eskpie表
输入代码:
(%

if("m"&Session("desked''1."1thenCommandl if(session("mnshu"1."")thcnComm肌dl

mzhuoha02"m¨&Session("desked")

mnshu2Session("renshu") listzhuohao="list"&Session("d鹳ked")

if("list'.&Session("desked",.…',thenCommandl

;楚哑型型型蛳殳"'thenComm{mdl

ordefid2 Session("orderlist")

建移服务器网站

嘏"D"&Session("desked")◇…')then
if("desk"&Session("desked")&"0"

Command l

Dpic="D"&Session("desked") Commandl—-deskxx



"")then

"desk"&Session("desked"设"0"
%>

《%
set

Command 1=Server.CreateObjeet("ADODB.Command")

Command 1.ActiveConnection 2

MM—orderdata—STRING SET"+Replace(Commandl__mzhuohao,…,

Commandl.CommandText="UPDATE tdeskpic

""")+"=,'.+Replace(Commandlmrenshu,"…,""")+…,"+Replace(Commandlwlistzhuohao,…",
"…')+"=一"+Replace(Commandl__.orderid,11111…"')+111911+Replace(Commandl "d"+Replace(CommandI__deskxx,11111""")+"'WHERl3 id.1" Commandl.CommandType=l Command I.CommandTimeout=0 Command 1.Prepared=true Command 1.Execute() 多》 Dpic,11111""")+

类似地,设置命令2重置desknum表,还原选定桌位上相应座位的窄出图标, 即将桌位上的座椅按入座人数也还原为未占标示.
<%Dim i%> <%Dim renshU%I>

《%if Session("renshu")c叼Then renshu=Session("renshu")%>

≈6 if"!seat"&Session("desked")◇"Then
%> 《%If renshu<l Then renshu=8%> <%for净1
to

Comman划esknum="tseat"&Session("desked")

renshu%> seatnum="S"&i%>

<%if"Stt&i◇""then Command2

《% set Command2=Server.CreateObject("ADODB.Command")

Command2.ActiveCormection 2 MM—orderdata—STRING Command2.CommandText="UPDATE"+Replace(Command2__desknum,111119…")+"SET"+ Replace(Commandt_seatnum,"…,…"')+"_.pie/seat0.gif'WHERE id21"

蕞f QtWARM的屯r^菜系统戟件设计

Command2CommandTypc2 I Command2CommandIimeout=0 Command2 Prepared="ue Command2 Execute()

%>

%nexf%>
数据表重置完毕后添加网页转向行为返回就餐大厅餐位信息页面hall
asp.

最后,logout asp退出管理时,只需要调用服务器登出行为井转到登录首页,如 图5.25所示.

图s.25登出管理

全此,本电r点菜系统网站主要页随制作基本完成.根据需要可以丰富用户
管理,菜单更新,材料管理等功能页面.

运行发布程序

第6章运行发布程序
在开发板原配内核及文件系统的基础上,内核配置中添加无线网卡支持,根 文件系统中添加点菜终端程序,库文件,TL.WN322G+USB无线网卡驱动和
Wireless Tools配置管理工具,以及相应的环境和启动设置脚本,烧写入开发板, 发布运行程序.

6.1内核配置和编译
以开发板提供的linux2.6.12内核为基础,根据自己的需要更改配置【351.

1.首先将该内核源码包置于工作目录,解压这个Linux源码包后,指定自
己的交叉编译工具:
¥tar xjvf linux一2.6.1 2—2440.tar.bz2 ¥vi Makefile

将该Makefile中的"CROSS COMPILE="一行修改为CROSS COMPILE
=/usr/local/arm/3.4.1/bin/arm.1inux.

2.载入原先的配置义件,对需要的部分进行更改.
|¥make menuconfig

进入"Load

an

Alternate Configuration File",输入配置文件名kemel_2440.cfg并

回车.由于使用热插拔的USB无线网卡,需要添加配置【36】:
Device Drivers.> Networking support·>

【幸】Network device

support

Wireless LAN(non-hamradio)-> r]Wireless
Device Drivers.> Generic Driver Options—> LAN

drivers(non-hamradio)&Wireless

Extensions

【奉]Hotplug

firmware loading

support

Cryptographic options一>

[*]ARC4 cipher
Library routines.>

algorithm

基于Qt和ARM的电了点菜系统软件设计

[*]CRC32

functions

Cryptographic options一>

f}]Michael MIC keyed digest r]AES
cipher algorithms

algorithm

然后退到主菜单里选择Exit退出并保存设置. 3.最后编译内核:
¥make zlmage

LD

vmlinux
System.map

SYSMAP

SYSMAP.tmp_System.map
OBJCOPY arch/arm/boot/Image

Kernel:arch/arm/boot/Image is ready
AS GZIP AS CC In file

arch/arm/boot/compressed/head.0
arch/ann/boot/compressed/piggy.gz

arch/arm/boot/compressed/piggy.o
arch/arm/boot/compressed/misc.O

included

from include/asm/arch/uncompress.h:29, from arch/arm/boot/compressed/misc.c:23:

include/asm/arch/regs-gpio.h:856:29:warning:no newline at end of file LD

arch/arm/boot/compressed/vmlinux

OBJCOPY

arch/arm/boot/zlmage

Kernel:arch/arm/boot/zlmage is ready

编译结束,在arch/ann/boot目录下得到linux内核压缩映像zlmage,将其烧写 到开发板.

6.2驱动无线网卡
本系统使用的USB无线网卡为TP—Link的TL.WN322G+,其芯片型号为 ZDl211b.另外,无线网卡需要配置工具管理,这里使用Wireless Tools. 驱动程序下载地址为:
.http://www.reactivated.net/software/zdl21 1-vendor/releases/ZDl21 1LnxDrv 2 22 0

』.iaLgz

63

运行发布程序

Wireless Tools下载地址为:
.http://www.hpl.hp.com/personal/Jean Tourrilhes/Linux/wireless tools.29.tar.gz

开发板USB无线网卡的驱动和管理实现【37】,步骤如下: 1.下载驱动程序ZDl21 1LnxDrv一2—22—o_0.tar.gz到工作目录,解压:
¥tar-xzvfZI)121

lLnxDrv一2—2圳.tar.gz
ZDl211

¥mv ZDl211LnxDrv一2—22_0l_o ¥cdZDl21l

2.编辑驱动的Makefile文件,修改编译条件:
¥gedit Makefile

编辑编译器,内核路径和ZDl21 lb芯片驱动版本开关【3引,内容如下:
群 撑.zdl211一USB2.0 802.1lb/g driver for Zydas ZDl211 chipsets 赛 CC=arm—linux-gcc CPP=ann-linux-g++

LD=arm-linux-ld

MoDp盯H:=/usr/local/arm/linux-2.6.1 2/
KERNEL SOURCE=/us川ocal/arm/linux-2.6.12/ ZDl21 lREV B=I KDlR:=/usr/locaVarrrdlinux-2.6.1 2/

3.编译驱动
S export PATH=/usr/local/arm/3.4.1/bin/:¥PATH

¥make

完成后生成zdl21 lb.ko. 4.下载配置工具wireless_tools.29.tar.gz到工作目录,解压:
¥tar-xzvf wireless_tools.29.tar.gz ¥mv ¥ed
wireless_tools.29.tar.gz wireless_tools

wireless—tools

5.编辑wirelesS tools的Makefile文件,修改编译条件:
¥gedit Makefile

修改编译器,内容如下: 蝴Compiler
to

use(modi矽this

for

cross

compile).

基于Qt和ARM的电子点菜系统软什设计

CC=arm-linux—gee

渊Other tools you
AR=armqinux-ar

need to modify for

cross

compile(static

lib

only).

RANLIB=arm·linux.ranlib

6.编译wireless

tools

¥export PATH=/usr/local/arm/3.4.1/bin/:¥PATH ¥make

生成iwconfig,iwlist工具和libiw.so.29库.

6.3根文件系统制作
cramfs是~个只读的压缩文件系统,采用zlib压缩算法,同时兼顾压缩率和 解压缩速度.在嵌入式系统平台中,利用它可有效地节省Flash存储空间,使系 统有可能通过更低容量的Flash存储相同的文件,从而降低系统成本【391.这里便

选用cramfs文件系统,以开发板提供的y12440_demo.cramfs根文件系统文件为
基础,添加程序,库文件,TL.WN322G+USB无线网卡驱动和Wireless Tools配 置管理工具,以及相应的环境和启动设置脚木【401.

1.复制y12440_demo.cramfs到工作目录,再建立以下两个文件:
Smkdir roms

¥mkdirtmp

2.将y12440_demo.cramfs挂接到roms目录:
¥mount y12440_.demo.cramfs toms-0 loop

3.将roms目录下的内容压缩成1.tar:
St瑟-evfl.tarroms

4.将压缩包解压到tmp目录下:
¥umotmt roms

¥cd..
¥mv 1.tartmp

¥cdtmp ¥tar-)wf
¥rm 1.tar 1.tar
.

65

运行发布程序

S export

CRMFS2¥PWD/roms

¥Istoms

可以看到根文件系统目录:
bin etc lib linuxfc proc sbin testshell

tmp
usr

vat

dev home

ramdisk

5.进入工作目录,将orderBrowser程序文件添加到该cramfs根文件系统
的相应目录:
¥cp orderBrowser¥CRMFS/usr/loeal/Trolltech/QtFAARM_8/orderBrowser

6.查看其链接库文件:
¥arm—linux-strings orderBrowser

列出其链接库:

libQtWebKit.SO.4

libQtGui.SO.4

libQtNetwork.SO.4 libQtCore.SO.4

7.

复制上面列出的库文件及其实际链接文件到根文件系统的相应目录:

¥cp—arf libQtWebKit.SO.4 libQtWebKit.SO.4.5.0¥CRMFS/usr/local/Trolltech/QtE4ARM一8/lib ¥cp—arf libQtGui.SO.4 libQtGui.SO.4.5.0¥CRMFS/usr/local/Trolltech/QtE4ARM_8/lib. ¥cp.arf libQtNetwork.SO.4 libQtNetwork.SO.4.5.0¥CRMFS/usr/locai/Trolltech/QtE4ARM_8/lib ¥cp—arf libQtCore.SO.4 libQtCore.SoA.5.0¥CRMFSlusrtloeallTmllteeh/QtE4ARM_8/lib

8.进入驱动程序所在目录复制到根文件系统的相应目录:
¥cp zdl21lb.ko¥CRMFS/usr/loeal/tool

9.进入Wireless Tools所在目录,复制iwconfig,iwlist工具及libiw.so.29
库到相应目录:
S cp iwconfig iwlist¥CRMFS/bin

¥e1)iibiw.so.29¥CRMFS/Iib

lO.设置启动脚本.baslⅡ℃,添加如下内容【41】:
撑.bashrc

基于Qt和ARM的电子点菜系统软件设计

export export export export export

QTDIR="/usr/local/Troiltech/QtE4ARM一8" QTEDIR=¥QTDIR PATH=¥QTDIR/bin:¥PATH LD_LIBRARY_PATH=¥QTDIR/iib:/lib:/usr/lib QWS_MOUSE_PROTO=linuxtp:/dev/ts

insmod lusr/local/tool/zdl2llb.ko
ifeonfig wlan0 up iweonfig wlan0 key labl0 iwconfig wlan0 essid"labyq" iweonfig wlan0 ap auto

ifconfig wlanO 1 92.1 68.2.1 1 netmask 255.255,255.0

11.文件添加完成,回至I]¥CRMFS目录制作cramfs根文件系统:
¥cd¥CRMFS S mkcramfs roms 2440_Qt45.cramfs

运行成功后,在当前目录下生成2440_Qt45.cramfs根文件系统,将其烧写到开
发板.

6.4程序运行
1.内核启动.


Load Kernel... Uncompressing Linux………………………………………………………………………………………… dOne,

booting the kernel.
Linux version EDT 2009

2.6.12-h1940儋ege@gege-desktop)(gcc
.

version

3.4.1)#16

Tue May 26 19:14:38

CPU:ARM920Tid(wb)[41 129200】revision 0(ARMv4T)

In:/dev/touchsereen/0:File exists Please press Enter to activate this console. In:/dev/touchscreen/0:File exists

[root@(none)/】撑
67

运行发布程序

2.检查网络.

从开发主机上ping无线网卡的IP地址确认网卡工作:
¥ping-c 5 192.168.2.11

输出:
PING 192.168.2.1

l(192.168.2.1 1)56(84)bytes

ofdam.

64 bytes from 192.168.2.11:icmp_seq=1 R!=64 time=0.026 ms 64 bytes from 1 92.1 68.2.1 1:iemp_seq=2 ttl=64 time=0.0 1 9 ms

64
64

bytes from 1 92.1 68.2.1 1:icmp_seq=3 ttl=64 time=(}.022 ms

bytes

from 1 92.1 68.2.1 1:icmp_seq=4 ttl=64 time=0.023 ms

64

bytes from 1 92.1 68.2.1 1:icmp_seq=5 ttl=64 time=0.027 ms

—一1 92.1 68.2.1 1 ping statistics-—— 5 packets transmitted,5 received,O%packet loss,time 3996ms
rtt

min/avg/max/mdev一0.0 1 9/0.023/0.027/0.005

Ills

说明无线网卡己接入WLAN并且工作正常.
3.启动程序.
¥cd/usr/local/Trolltech/QtE4ARM
¥./orderBrowser—qws
8/orderBrowser

4.运行程序,如图6.1所示.

单j oc和ARM的№了A菜系筑轼抖设"

i i
一圈一圈一簟一圜一 i一■一

程序调试和问题解决

第7章

程序调试和问题解决

课题研究过程中碰到不少问题,经过网络搜索和不断尝试而一一解决.这里 记录了几个典型备忘,方便自己和后来者后续研究学习.

7.1开发板连接
1.开发板连接时安装USB驱动导致蓝屏. 解决: 这是开发板驱动的bug,在主机认到硬件后关闭开发版电源,然后继续USB 驱动安装即可避免蓝屏.

2.使用Minicom和超级终端通过串口连接开发板时,终端经常出现乱码. 解决: 首先确认下串口通信参数设定正确(波特率115200,8位,无奇偶位,停止 位1,无硬件流),然后查看YLSBC2440开发板上跳线组J17连接.J17将 ¥3C2440自身的三个串口都设置了一个跳线,可以选定三个串口中的一个转换为 RS232电平输出到DB9接头上,其中TXDL,RXDL两个管脚是TTL电平输 入输出口,RXD
232,TXD

232管脚是由TXDL,RXDL输入的电平通过

MAX232转换输出的RS232电平输出.这里使用RS232的COMl,接入(三 角标起)3-4,9.10,13—14,15.16脚.

7.2软件安装编译
1.在Ubunm下编译Qt/X11时出错.

在包含自一L./include/QtGui/private/qt__x1 l_p.h:l的文件中, 从kemel/qapplication.cpp:76: ./../include/QtGui/private/../..,../src/gui/kemel/qt_xl l_p.h:71:22:
X1

错误:

1/Xlib.h:没有该文件或目录

基于Qt和ARM的电子点菜系统软件设计

.ZJinelude/QtGui/private/..|.|../src/gui/kemel/qt_xI
X1

I p.h:76:23:

错误:

l/XutiI.h:没有该文件或目录 错误:

..LJinclude/QtGui/private/..|..}一/src/gui/kemel/qt_x,l_p.h:77:21: Xl!/Xos.h:没有该文件或目录 .j.Jinclude/QtGui/privateL.l—L./src/gui/kemel/qt_xl
Xl l_p.h:84:23:

错误:

1/Xatom.h-没有该文件或目录 from¨/../include/QtGui/pdvate/qt__xI l_p.h:l,
from kemel/qapplication,cpp:76:

In file includel

.I.Jinclude/QtGui/private/..|..1./src/gui/kemei/qt_xl l_p.h:286: 'Colormap'没有命名一个类型

错误:

..1./include/QtGui/private/一|..I.,/src/gui/kemel/qt_xl l_p.h:658: ·CursorShape,在此作用域中尚未声明 .j../include/QtGui/private/,.|..1./src/gui/kemel/qt_xI tXPoim'在此作用域中尚未声明 ..t'../include/QtGui/private/../.././src/gui/kernel/qt_xI 1_p.h:673:错误: .j~/include/QtGui/private/..|..j../src/gui/kemel/qt_xl l_p.h:674: ·XReetangle,在此作用域中尚未声明 ../../include/QtGui/pdvate/~j一}一/src/gui/kemel/qt_xl l_p.h:674:锚误: ..I.Jinclude/QtGui/private/一|~f../src/gui/kemel/qt_xl'j.h:675: 'XChar2b,在此作用域巾尚未声明 模板参数1无效 模板参数1无效
l_p.h:673:

错误:

错误:

错误:

错误:

.Y../include/QtGui/private/^/../src/gui/kemel/qt__x1

l_p.h:675:错误:

模板参数1无效

make[1]:奉幸奉【.obj/release—shared/qapplication.0】错误l make[1]:Leaving
directory'/usr/local/qt/qt450/qt4.5.0/src/gui'

make:幸幸幸【sub-gui-make_default-ordered]错误2

解决: 搜索得知是Ubuntu没装xlib开发包,需要apt.get安装一下:
霉sudo apt-get install libxl 1-dev

在编译qvfb的过程中出现了一个类似问题:

/usr/binfld:cannot find--1Xtst

这是Ubuntu没装libxtst,同样印t.get安装一下:
¥sudo apt-get install libxtst-dev

71

程序调试和闷题解决

2.编译Qt/Embedded for X86时出错.

make[3]:

Entering

directory

/usr/local/qt/qH50/qt·embedded·linux-opensource—src-4.5.0/examples/desktop/screenshot'
linking screenshot

/usr/local/qt/qt450/qt—embedded—linux-opensource—SIC-4.5.0/lib/libQtCore.SO"undefined to,QlnotifyFileSystemWatcherEngine::createO' /usr/local/qt/qt450/qt—embedded—linux-opensource—SIC一4.5.0/lib/libQtCore.SO:undefined
to'elock__gettime'
.

reference

reference

/usr/local/qt/qt450/qt-embedded—linux—opensource—src一4.5.0/lib/libQtCore.SO"undefined reference

幻'QDnotifyFileSystemWatcherEngine::createO'
/usr/local/qt/qt450/qt-embedded—linux-opensource-src-4.5.0/lib/libQtGui.SO:undefined reference

to'QLinuxFbScreen::QLinuxFbScreen(int)'
collect2:ld returned l exit status

make[3]:¨幸fscreenshot】Error

1 directory

make[31:Leaving

/usr/Iocal/qt/clt450/qt—embedded—linux-opensource—SrC一4.5.0/examples/desktop/screenshot'

make[2]:簟幸掌【sub-screenshot-make_default-ordered】Error make[2]:Leaving

2

directory

/usrrlocal/qt/qt450/qt-embedded-linux-opensource-SIC一4.5.O/examples/desktop'

make[1]:幸幸奉【sub-desktop-make_default】Error …

2

解决:

编译desktop例程时出错,猜想是程序本身的问题.为了快速解决,直接跳

过编译该例程,即编辑examples目录下的工程文件examples.pro,用撑符注释掉
该例程子目录:

SUBDlRS 群

=t

desktop| dialogs| draganddrop| graphicsview l ipe|

itemviews|

layouts I linguist| mainwindows l network| paiming| qtconcurrent| richtext, sql| threads|

再次make继续编译,如果还有例程出错则再次出错项注释掉,直到通过.

编译点菜终端程序出错.
¥make distclean Ira—f moc_mainwindow.cpp tm-fqre source.cpp l'm.f main.O mainwindow.O webview.O moc_mainwindow.o qrc__source.O rm.f宰一COl'e·.corg rm—forderBrowser rm.f Makefile S

qmake—project

¥qmake
¥make

输出错误信息:
arm.1inux.‖斗-c.pipe-02-Wall—W—D—REENTRANT—DQT_NO DEBUG—DQT_GUI -DQT NETWORK
LIB LIB

-DQT CORE_LIB

-DQT_SHARED
-l-

0…/√…/./Trolltech/QtE4ARM_8/mkspees/qwsllinux-arm一驴斗 -I…/.,'././TroUtech/QtE4ARM_8/include/QtCore -I…/./..L./Trolltech/QtE4ARM_8/include/QtNetwork

矗.0.|.0一/Trolltech/QtE4ARM_8/include/QtGui j一|.|.j../Trolltech/QtE4ARM_8/include'I·-I·式·
-.O

main.O main.cpp NO

arm.1inux-g++.c-pipe-02.Wall—W·D—REENTRANT—DQT .DQT_NETWORK
LIB

DEBUG·nQ'r

Gtn

Lm

-DQT

CORE_LIB

-DQT__SHARED
-It

A.j.j.|./Trollteeh/QtE4ARM_8/mkspees/qws/linux-arm-g++

73

程序调试和问题解决

文.j~|…/./Trolltech/QtE4ARM_8/include/QtCore A..1..|..L./Troiltech/QtE4ARM_8/include/QtNetwork —I../…/./.,rFrolltech/QtE4ARM一8/include/QtGui—I../…/…//Trolltech/QtE4ARM_8/include.I.-I.-I.
一O

mainwindow.o mainwindow.cpp

webview.o(.gnu.1inkonce.r._zTV7WebView+0xa4): 'QWebView::dropEvent(QDropEvent幸)' webview.o(.gnu.1inkonce.r._ZTV7WebView+0xb4): 'QWebView::changeEvent(QEvent枣)'

undefined

reference

to

undefined

reference

to

webview.o(.gnu.1inkonce弋.王TV7WebView+0xbc):
,QWebView::inputMethodEvent(QlnputMethodEvent木). webview.o(.gnu.1inkonce.r._ZTV7WebView+0xc0):

undefined

reference

to

undefined

reference

to

'QWebView::inputMethodQuery(Qt::InputMethodQuery)const. webview.o(.gnu.1inkonce.r._ZTV7WebView+0xc4): ,QWebView::focusNextPrevChild(b001)' webview.o(.gnu.1inkonce.r._ZTl7WebView+0x8):undefined
reference to'typeinfo for undefined reference

to

QWebView'

webview.o(.gnu.1inkonce.t._ZN7WebViewDlEv+0xlc):In function'WebView::~WebView0':
:undefined reference

to'QWebView::--QWebView()'

webview.o(.gnu.1inkonce.t●喇7WebViewDOEv+0x20):In function,WebView::NWebView()':
:undefined reference

to,QWebView::---QWebViewO'

collect2:ld returned 1 exit status

make:堆幸毫[orderBrowser_1]错误1


解决: 程序如果使用到了webkit模块,编译时需要在qmake-project后生成的.pro 工程文件中添加webkit模块支持:
¥gedit orderBorwser.pro

增加一项:
QT+_webkit

74

基于Qt和ARM的电子点菜系统软件设计

7.3板上操作
1.程序启动失败.
[root@(none)orderBrowser]#./orderBrowser QWSSocket::connectToLocalFile could QWSSocket::connectToLocalFile could
not not

connect::No connect::No

such file such t'de such file file

or

directory

or

directory directory directory
directory

QWSSocket::connectToLocalFile could not connect::No QWSSocket::connectToLocalFile could QWSSocket::connectToLocalFile could
No
not

or

connect::No such
connect::No

or

not

such file

or

Qt

for Embedded Linux
run

server

appears tO be running.

If you want to

this program

as a server,

add the"-qws"command-line option.

[root@(none)orderBrowser]#

解决: Qt/Embedded窗口系统使用基于进程的C/S结构,Qt/Embedded包含了一个

或多个进程,需要其中的一个进程可作为服务器.程序启动时不带一qws参数就
是QWS Client,带有这个参数的就是QWS Server.一般QWS Server还要管理一

些其它的系统资源,一定先于QWS Client启动,否则QWS Client将启动失败【421.
故这里需要加上.qws参数,使这个应用程序成为QWS Server.在用qvfb模拟时 同样也需要加此参数.

2.启动程序出现段错误和非法指令.
[root@(none)orderBrowser]#./orderBrowser_qws
Segmentation fault

Illegal instruction

[root@(none)orderBrowser]#.

解决: 考虑可能是程序代码问题,使用最简单的HelloWorld测试,仍旧出现Illegal instruction错误;考虑是编译器glibc与busybox,内核版本的配合问题,尝试使 用编译内核用的cross.3.4.1交叉编译器重新编译Qt/Embedded forARM,再次尝 试HeUoWorld,问题解决.
75

程序调试和问题解决

3.启动程序运行出现总线错误.
【root@(none)orderBrowser]#./orderBrowser_qws
Bus
error

【root@(none)orderBrowser]# 解决:

尝试运行chip例程,textedit例程等demos都顺利启动,而用到W|eb鼬t模 块的browser等程序不行,偶然发现cramfs文件系统单文件最大支持默认1 6M, 查看orderBrowser的依赖库文件,发现:
S

is-sh¥QTDIR/lib

总用量31M

988K

libQtNetwork.SO.4.5.0

9.9M libQtGui.SO.4.5.0 3.0M libQtCore.SO.4.5.0 17M libQtWebKit.SO.4.5.0

其中libQtWebKit.SO.4.5.0已经超过1 6M,搜索得知有破解cramfs单文件最

大16M的限制的方法【431.下载cramfs tools,修改源文件中的linux/cramfs—fs.h,
找到CRAMFS
●●■

SIZE

WIDTH一项,修改为:

/*#define

CRAMFS

SIZE

WlDTH

24幸/

#define CRA~孵S

SIZE

WIDTH

25

make编译后产生cramfsck,mkcramfs两个工具,使用该mkcramfs重新打包
根文件系统.修改需要同时在内核源文件中进行,即对include/linux/cramfs—fs.h

以相同的数值进行改动,再配置编译内核烧入开发板. 为了保证系统稳定性,通过增加配置Qt/Embedded的开关选项,进一步裁剪
QtWebKit库到16M以下.

76

基于Qt和ARM的电子点菜系统软件设计

第8章结论与展望

8.1结论
本课题旨在研究开发一种更便捷有效应用的无线点菜系统,提供更加快速, 便捷,透明,卫生的餐饮条件.这对餐饮企业提高服务质量,管理效率而占据市 场份额富有积极意义,同时也为自身研究学习嵌入式系统和GUI应用开发提供 一个良好的平台. 本无线点菜系统以程序软件的通用性和易用性为研究方向,具有以下特点: 1.适用于一般PDA环境.课题利用实验室已有的ARM9核心的YLSBC2440 开发板作为硬件基础,以广泛使用的IEEE802.1lb WLAN实现无线通讯. 2.具有优良的跨平台性能.课题采用Qt/Embedded开发点菜终端程序,能 够"一次编写,随处编译",只要以对应的编译器针对不同的系统和平台配置编 译Qt/Embedded库,程序便能从Linux移植到相应的目标平台.

3.易于操作和维护.网站服务器采用普通PC机,配合多数人熟悉的
Windows系统,最大程度上降低了服务器操作和维护的难度.

8.2展望
由于初涉嵌入式应用开发,课题研究还不够深入.本电子点菜系统还需要进
一步完善和提高,主要是:

1.程序响应比较迟缓,造成终端操作不够流畅,需要进一步配置裁剪运行
库文件特别是QtWebKit库以提高性能.

2.点菜终端以触摸屏为人机接口,320*240的大小一定程度上限制了界面内
容布局. 3.服务器网站建设中只是实现了点菜操作,餐位管理等基本功能,后续还 可以建立菜系分组,仓储管理,自助平台等项目.

参考文献

【参考文献】
[1] [23

杨柳.2008中国餐饮产业运行报告注【M】.湖南:湖南科学技术出版社,2008. 龙脉.
C/S+B/S

结构的餐饮无线点菜系统【EB/01].

http://bbs.pdafans.com/viewthread.php?tid2338599.2006—9—1 0.

[3]

熊钰岚,何月顺,刘希民.基-p J2EE开发平台的无线点菜系统【J】.计算机与现代化,

2006,(10):63—65. [4]
48.50.

郭金淮,李超,汤汉屏.蓝牙技术与红外无线接入技术[J】.数据通信,2002,(01):

[5]

李玮.采用nRF2401无线收发点菜器系统[J】.

电子技术,2007,(01):59-61.

[6]

李科景,李振坤,黄益民.基于PDA无线点菜餐饮系统的实现[J】.广东自动化与信

息上程,2005,(0 1):27-32. [7] 李振坤,蓝芳华.基于PDA的无线餐饮点菜应用系统的设计与实现【J】.计算机应用

研究,2006,(02):189-194. [8] 田芳,赵方明,姚宗国.基于IEEE802.11系列无线局域网协议的比较及发展趋势[J】.

山东人学学报(工学版),2003,(02):1 63.1 67.

[9]

田泽.嵌入式系统开发与应用[M】.北京:北京航空航天大学出版社,2005.

[10]Arthur Griffith,高寿福,张华.KDE 2/Qt编程宝典[M】.北京:电子工业出版社,2002. [11]林晓飞,刘彬,张辉.基于ARM嵌入式Linux应用开发与实例教程[M】.北京:清华大 学出版社.2007. [12]陈文智.嵌入式系统开发原理与实践[M】.北京:清华大学出版社,2005. [13]优龙科技.YLSBC2440开发板使用手册[EB/01].优龙科技:5—8. [14]John

Ross,于海涛,汤平杨.晰.Fi:安装,配置和使用802.11b无线网络[M】.北京:清

华大学出版社.2004. [15]百度百科.Ubuntu.http://baike.baidu.com/view/4236.htm.2008.05.16. [16]周立功.ARM嵌入式系统基础教程【M】.北京:北京航空航天大学出版社,2005. [17]饕 餮 盛 宴
.

ubuntu

7.10











【EB/01].

http://hi.baidu.com/lhurficane/blog/item/c9e3542c329278e88a1399e6.html,2008-03-19.

基于Qt和ARM的电子点菜系统软件设计

[18]Xteam(中国)软件技术有限公司.Qt程序设计【M】.北京:清华大学出版社,2002. [1 9]Jasmin Blanchette,Mark Summerfield.C++GUI
Open Programming with

Qt 3(Bruce

Peren'S

Source)[M].USA:Prentice

Hall P1]艮2004.

[20]倪继利.q及Linux操作系统窗口设计[M】.北京:电子工业出版社,2006. E21]一缕阳光.ARM Linux交叉编译工具链制作攻略Ha/Oil.

http://blog.chinaunix.net/ul/42662/showart_342564.html,2007—06-25.

[22]创建嵌入式Linux

开发环境之交叉编译环境【EB/01].

http://blog.chinaunix.net/u2H6480/showart_1 1 339 1 9.html,2008·08-1 9.

[23 2

Jasmin BlancheUe,Mark

Summerfield.C什GUI Programming

with Qt 4【M】.USA:

Prentice Hall PTR.2006.

[24 2

Mendel

Cooper.

Advanced

Bash—Scdpting

Guide[EB/0 1].

http://www.1inuxsir.org/main/doc/abs/HTML/index.html.2005—11—28. [25]Vincent
Hsu.Ubunm

8.10下建立Qt/Embedded

4.5开发环境[Ea/01].

http://blog.chinaunix.net/u3/91092/showart

1862993.html,2009—03-14.

[26]Force_eagle.移植基于Qt4.4-tpl

的WebKit到ARM平台[EB/01].

http://blog.csdn.net/force_eagle/archive/2008/01/29/2071507.aspx,2008—01-29. 1-27]蔡志明,卢传富,李立夏.精通Qt4编程[M】.北京:电子工业出版社,2008. [28]Daniel Solin,袁鹏飞.24小时学通Qt编程【M】.北京:人民邮电出版社,2000. [29]Wenjiejia. QT 文 本 编 码 转 换 方 法 [EB/01].

http://hi.baidu.com/wenjiejia/blog/item/cf7fd2b44194237b8bd4b2e3.html,2009-03—05. [30]孔璐,朱云虎,周慧,李谨宏.ASP+Dreamweaver数据库网站开发与实例【M】.北京: 清华大学出版社,2007. [31]李春葆,曾平.数据库原理与应用:基于Access 2003[M1.北京:清华大学出版 社,2008.

[32]陈学平.Dreamweaver
2007.

8.0+ASP动态网站开发案例教程[M】.北京:电子工业出版社,

[33]何秀明,王伟光,郑庆荣.Dreamweaver
工业出版社,2007.

8网页设计与热I,J网站制作[M】.北京:电子

[343李在勇,全秀庆,裴春花,金丽华.Dreamweaver MX 2004从入门到精通[M】.北京: 中国青年出版社,2003.
79

参考文献

[35]Daniel P.Bovet,Marco
O'Reilly,2005.

Cesati.Understanding the Linux Kernel,Third

Edition[M].USA:

[36]周立功.ARM嵌入式系统软件开发实例[M】.北京:北京航空航天大学出版社,2004. [37]刘淼.嵌入式系统接口设计与Linux驱动程序开发[M】.北京:北京航空航天大学出 版社.2006. 1-38]Jonathan Corbet,Alessandro Edition[M].USA:O'Reilly,2005. [39]郑灵翔.嵌入式系统设计与应用开发[M】.北京航空航天大学出版社,2006. E40]季昱,林俊超,宋飞.ARM嵌入式应用系统开发典型实例[M】.北京:中国电力出版 社,2005. [41]伟研科技. Qt4.4.3 在
s3c2440 Rubini,Greg Kroah.Hartman.Linux Device Drivers 3rd

平台

的移植[EB/OI].

http://blog.mcu01.com/User/gzweiyan/Article/7806_1.htm.2008-11-11.

[42]孙纪坤,张小全.嵌入式Linu)(系统开发技术详解一基了:ARM[M】.北京:人民邮电出
版社.2006. [43]Pank.Cramfs
2004.08.1 2 file size

limit[EB/01].http://pank.org/blog/archives/000305.html.

基于Qt和ARM的电子点菜系统软件设计

致谢

衷心感谢导师洪永强教授,在三年的硕士学习阶段对我学业的指导和帮助, 本文是在洪永强教授的悉心指导下完成的.在课题研究过程中,洪老师不仅全力 为我们创造了良好的科研条件和融洽的氛围,并在百忙之中给予了耐心细致的指 导.洪老师广博的理论知识,踏实的工作风范,孜孜不倦的科研精神以及对学生 无微不至的关怀让我终生受益. 衷心感谢机电系的各位老师,在四年本科及三年硕士学习阶段传授给我各方 面的知识,为我将来的学习和工作奠定了良好的基础. 感谢郑丹,郑浩哲,马利娜,薛文东,黄义森,栾婷,李恒庭,孟超,李楠, 邓飞等同学在本课题研究过程中给予我的帮助,以及在平时的学习和生活中给予 我的支持和鼓励. 感谢抽出时间审核本文的老师们. 谢谢我的亲友,为我的成长倾注的无限心血.

81

基于Qt和ARM的电予点菜系统软件设计

硕士期间发表的论文

[1]Wu xinyi(吴鑫毅),Xue Wendong(薛文东),Huang,Wensen(黄文森),Hong Yongqiang (洪永强).Design
of Remote Monitoring System for Complex
on

Workshop.Proceedings

of the

Second International Symposium lSBN:978.7.5062.9220—7.

Test

Automation&Instrumentation,2008.ISTP收录,刊号

[2-1 Huang,Wensen(黄文森),wu Xinyi(吴鑫毅),Xue Wendong(薛文东),Hong (洪永强).Design

Yongqiang

of Embedded Wreb Services Extended for Multi—Parameter Environment of the Second

Instrument.Proceedings

International

Symposium

on

Test

Automation&

Instrumentation.2008.刊号ISBN:978—7—5062—9220-7. [3]Xue Wendong(薛文东),Huang,Wensen(黄文森),wu xinyi(吴鑫毅),Hong (洪永强).Design
of PLC—based Yongqiang

Measuring and

Controlling

System

for Polysilicon
on

Crystallization Holding Furnaces.Proceedings of the Second International Symposium

Test

Automation&Instrumentation.2008.ISTP收录.刊号ISBN:978.7.5062.9220.7.

相关文章:
基于嵌入式系统的无线点菜系统方案设计
百度文库 专业资料 IT/计算机 计算机软件及应用上传文档支持以下设备:扫二维码下载...嵌入式系统课程设计(基于A... 16页 免费 基于Qt和ARM的无线点菜系统... 88...
基于嵌入式的无线点菜系统课程设计
基于嵌入式系统的无线点菜系统方案,内含硬件框架和软件实现!河北经贸大学课程设计...基于Qt和ARM的无线点菜系... 88页 免费 基于蓝牙技术的嵌入式无... 2页 ...
基于ARM的点菜系统设计
基于ARM的点菜系统设计_计算机软件及应用_IT/计算机_专业资料。嵌入式课设基于...[6]钟亮. 基于ARM的无线电子点菜系统设计与实现[D].北京工 业大学,2012....
基于Linux的无限点餐系统开题报告
显然,从点菜服基于 Qt 和 ARM 的无线点菜系统软件设计务等基础项目即实现信息化管理,提供 更加快速、便捷、透明、卫生的餐饮条件,对餐饮企业服务质量和管理效 率...
无线点菜系统实现说明
1.开台点菜 . 客户端程序启动时打开图形界面,主界面上有一个开台按钮,点击开...无线点菜系统 26页 免费 无线点菜系统 22页 1下载券 基于Qt和ARM的无线点菜系...
嵌入式毕业设计论文基于ARM的嵌入式GUI点菜系统
到各种 PDA 系统的点菜终端程序和普通 PC 机的服务器软件,实现无线点菜系统。主要...式 Linux 为平台的,基于 arm-linux 的 QT 触 屏模块的硬件和软件方面的设计...
点菜系统下位机的设计规范
基于Qt和ARM的无线点菜系统... 88页 免费 嵌入式电子点菜系统的设计 7页 免费...三、程序中子程序语言规范: 程序中子程序语言规范: 语言规范全局变量的设置: ...
《基于嵌入式的电子点菜服务器系统的设计与实现》开题报告
课题内容包括: 1.进行软件需求的分析,完成软件系统方案和数据库的设计 2 在 ...基于Qt和ARM的无线点菜系... 88页 免费 嵌入式电子点菜系统的设... 7页 ...
毕业设计—基于Qt嵌入式网络聊天系统的设计
毕业设计—基于Qt嵌入式网络聊天系统的设计_学习计划_计划/解决方案_实用文档。...基于Qt和ARM的无线点菜系... 88页 免费 基于Qt的嵌入式媒体播放... 7页 ...
更多相关标签:
qt实现点菜系统 | 无线点菜系统 | 广州无线点菜系统 | 广州无线点菜宝系统 | ipad无线点菜系统 | 无线点菜宝系统 | 乐点无线点菜系统 | 博立无线点菜系统 |