基于Linux嵌入式操作系统的图形化界面河南工业大学_第1页
基于Linux嵌入式操作系统的图形化界面河南工业大学_第2页
基于Linux嵌入式操作系统的图形化界面河南工业大学_第3页
基于Linux嵌入式操作系统的图形化界面河南工业大学_第4页
基于Linux嵌入式操作系统的图形化界面河南工业大学_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、河南工业大学论文题目:基于 Linux 嵌入式操作系统的图形化界面的 研究和实现 学 院: 信息科学与工程学院班 级: 电科1304姓 名: 学 号: 2013160304指导老师姓名:王金峰摘要:随着通讯技术的发展和 3G 网络的推广,用户对手机的要求不在只是简单的语音、收发短信等基本功能,手机办公、手机娱乐等功能受到人们的青睐。PDA (Personal Digital Assistant) 正是在这种背景下产生,并且发展壮大,它不仅集成了传统手机的基本功能,同时兼容了笔记本电脑的诸多功能,真正满足了用户需求。PDA市场潜力巨大,是个人终端技术的发展趋势。 本文以嵌入式的PDA为研究对象,

2、论述了基于嵌入式Linux和Qt/Embedded的图形界面终端的设计与实现,最终搭建了适用于 PDA 的个性化人机交互系统。论文的主要内容包括:(1)通过对当前流行的几种嵌入式处理器、嵌入式操作系统、GUI 图形支持系统优缺点的讨论,结合设备特点选择了以ARM9核心的S3C2410为本系统的硬件平台,2.4.18 内核 Linux 和 Qt 为本系统的软件平台。(2)建立硬件开发平台,对s3C2410处理器、以及外围接口部件进行了分析介绍,讲述了它们的结构及功能;(3)对Linux 系统的内核和文件系统作了深入研究。详细分析了 Linux 系统 bootloader 的功能以及它的编译与移植

3、;Linux 内核的剪切、编译和移植;Linux文件系统的制作、编译与移植, 为系统开发搭建了软件平台。 (4)在对 Qt/Embedded 系统分析的基础上,分别建立了Qt 在 PC 机上的开发调试环境和 Qt 在 cygwin 上的编译移植环境。(5)在PC 机 Qt开发环境下,开发了几个基于 Qt/E 的具有友好界面的应用软件。利用这几个程序构建了自己的图形化界面系统,在 cygwin 上经过编译移植进目标板,运行稳定。验证了 Linux+Qt/Embedded+ C+开发环境的有效性。 最后,开发的成果为一套精美高效,可触摸式的人机交互系统,它具有可移植性好、操作简单和易于二次开发等特

4、性。 关键字:PDA 嵌入式处理器 嵌入式 Linux Qt/Embedded 人机交互系统S3C2410一、引言1.1嵌入式系统概述国际电气和电子工程师协会(IEEE)定义嵌入式系统为:“用于控制、监视或者辅助设备、机器或者车间运行的装置(An Embedded system is the devices used to control,monitor,or assist the operation of equipment,machinery or plants)”。通常来说,嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗等有

5、严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用程序四部分组成,用于实现对其它设备的控制、监视或管理等功能。 嵌入式系统有如下特点: (1)专用性强为特定应用设计,专用于特定的任务,软硬件可裁剪,满足对象系统要求的最基本软硬件配置。(2)可靠性高代码固化、存放在存储器芯片或处理器的内部存储器件中。(3)功耗低、体积小、集成度高、成本低系统的硬件和软件都进行高效设计,在保证稳定、安全、可靠基础上量体裁衣,去除冗余,用较少的软硬件资源实现较高的性能。1.2嵌入式人机交互系统的研究现状人机交互是研究人、计算机之间相互作用的技术。界面是人与计算机之间交换信息的

6、媒介和对话接口,是计算机系统的重要组成部分。人机交互的发展从人去适应计算机逐步过渡到计算机不断地适应人,演变过程共经历了以下几个阶段:(1)早期的手工作业阶段,用户(程序设计员)采用手工操作和依赖机器(二进制代码)的方法在计算机上执行操作。(2)作业控制语言及交互命令语言阶段,采用批处理作业语言及交互命令语言与计算机交流,需要记忆大量命令,熟悉键盘输入方式。(3)多通道的智能人机交互阶段,涵盖了用户表达意图、执行动作或感知反馈的各种信息交互,如言语、手势、触觉等方面。多通道人机界面是基于视线跟踪、语音识别、手势输入、感觉反馈等的新交互技术,实现科学计算可视化、虚拟现实等,这些技术对计算机系统性

7、能提出了更高的要求。它允许用户利用多个交互通道以并行、非精确方式与计算机系统进行交互,旨在提高人机交互的自然性和高效性。1.3嵌入式人机交互系统的发展趋势当今信息时代,使得嵌入式产品获得了巨大的发展契机,为嵌入式市场展现了美好的前景,同时也对嵌入式研发提出了新的挑战。(1) 网络化要求随着因特网技术的成熟,未来嵌入式设备为了适应网络发展,必然要求硬件上提供各种网络通信接口,软件方面系统内核要支持网络模块,实现随时随地上网。(2) 精简系统内核设计者应尽量精简系统内核,只保留和系统功能紧密相关的软硬件,利用最低的资源实现最适当的功能。(3) 提供友好的多媒体人机界面嵌入式设备能与用户亲密接触,最

8、重要的因素就是它能提供非常友好的用户界面。1.4本课题研究意义嵌入式系统因其体积小、可靠性高、功能强等优势,已渗透到工业、农业、教育、国防、科研以及日常生活等各个领域,对各行各业的技术改造、产品更新换代、提高生产率等方面起到了极其重要的作用。同时,嵌入式 Linux 操作系统以其开放源代码、易于开发、功能强大、稳定、成本低等优势迅速跻身于主流嵌入式操作系统。基于嵌入式 Linux 操作系统的研究和应用具有巨大的学术和商业价值。相对于桌面系统,人机交互技术在嵌入式系统中的研究还处于初级阶段。嵌入式系统的终端产品在系统简洁、美观、方便好用,人性化设计等方面较桌面系统还有巨大差距,因此越来越多的人投

9、入到嵌入式 GUI 的的开发当中。本课题正是探索如何在S3C2410处理器(ARM9)上搭建和移植嵌入式 Linux操作系统并在移植好的操作系统上实现 GUI,同时实现基于 Qt/Embedded 的应用软件的开发,最后构造一个完整的 PDA 图形化系统。二、嵌入式系统开发硬件平台构建2.1硬件系统设计方案一个应用系统的设计都是面向产品的,以产品需求来定制系统。总的来说,在系统硬件体系结构设计时,应当遵守一定的标准,具体标准包括:(1)先要综合了解系统各方面需求,在分析之后确定合适的解决方案,提出硬件的体系结构及系统外围各功能模块的实现。(2)充分利用当前比较成熟的技术方案,这样可以保证电路设

10、计的正确性和可靠性,并且可以大大缩短系统的设计时间。硬件系统采用模块化、标准化设计,还应尽量选择典型的电路功能模块。(3) 因为硬件升级比软件升级相对复杂,所以硬件系统体系架构应该尽量使用开放模式,采用通用平台设计,以降低成本和减小开发周期,也便于将来对系统的改进与升级。 (4) 嵌入式系统一般采用软硬件一体化的解决方案,在硬件设计同时进行软件开发,硬件的方案要根据软件的可行性进行考虑,而软件的设计也要根据硬件的性能进行考虑,这样在具体实现时,整个系统就可以不断的进行分析与改进,能够使系统达到最优化。2.2系统需求分析本系统提供了一种嵌入式 PDA 多种应用软件的功能。友好的人机交互接口组成系

11、统的控制面板,方便用户的操作。网络通信和 mp3 解码播放等应用的实现使系统除了必需具有人机交互的控制功能外,还应该具有丰富的通讯、网络接口和强大的 mp3 解码功能。具体需求如下:(1)宿主机与目标板的交互接口,包括 UART 通用串口、JTAG 烧写接口等;(2)LCD 模块及触摸屏;(3)必须实现通用的以太网 Ethernet接口,用来实现目标机的远程登录和访问;(4)强大的处理器解码性能和可靠的音频控制器,实现 mp3 歌曲文件实时播放;(5) 必须具有足够的存储器空间,用来存储系统镜像和音视频文件。2.3硬件平台本设计使用Samsung公司 S3C2410处理器的S3EB2410开发

12、板作为硬件开发平台,用它进行 ARM 技术评估以及嵌入式Linux 系统设计。平台采用开放式架构设计,便于根据应用需要,进行各种功能扩展。其硬件框图如下图所示:(1)内核工作电压为 1.8V、存储器供电电压 3.3V、外部 I/O 设备供电电压3.3V;(2)使用外部 12MHz晶振,CPU 内部倍频至 200MHz;(3)LCD 接口,最大可支持 4K 色 STN 和 256 色 TFT;(4)4 路 PWM;(5)3 通道的 UART 串口接口;(6)双 USB2.0 接口,实现与 U 盘、硬盘、键盘等从设备的通讯,一通道USB DEVICE;(7)TSP触摸屏控制器;(8)8 通道 10

13、 位 ADC 模数转换接口;(9)10M 以太网卡;(10)IIC 总线 EEPROM;(11)IIS 数字音频输入/输出接口。(12)两片 32MB SDRAM,作为程序运行空间。64MB Nand Flash 存储器,用于存放 Linux 系统。2.3电路模块设计分析2.3.1网络模块S3C2410没有集成网络控制器,在嵌入式平台中需增加独立的以太网控制芯片来实现网络接口,本系统通过外接一片 CS8900A芯片扩展了一个 10M 的以太网接口。CS8900A 是美国 CIRRUS LOGIC 公司生产的以太网控制器,由于其优良的性能、低功耗及低廉的价格,使其在 10Mbps 嵌入式网络应用

14、中占有相当的比例。上图为 CS8900A 的硬件连接示意图。S3C2410 通过数据总线与若干控制信号和 CS8900A 相连接,系统与外部网络通信通过以太网接口进行扩展。以太网接口使用的是集成了网络变压器(Transformer)的 RJ45 网络接口,网络变压器的功能就是把 PHY 输出的差分信号用差模耦合的方式进行耦合滤波以增强信号,并且通过电磁场的转换,耦合到连接网线的另一端,这样使网络传输媒介和PHY 之间没有物理上直接连接,隔断了信号中可能存在的直流分量,实现了在不同电平下工作的设备可以传送数据。2.3.2 LCD模块S3C2410内部集成了 LCD 控制器逻辑单元,支持黑白屏 L

15、CD、STN-LCD、TFT-LCD 等多种显示屏,用来将 LCD 图像数据从系统内存的视频缓冲区传输到外部 LCD 驱动器,同时产生数据传输与显示时使用的各种时钟与控制信号。 如下图 所示的 S3C2410 的 LCD 控制器内部组成框图,LCD 数据总线VD0VD23 用来传输 16 位 RGB565 格式数据到液晶模块显示,LCD 控制线有 5条:VFRAME 帧同步信号、VLINE 行同步信号、VCLK 位时钟信号、LEND 行结束信号、VM 输出数据使能信号。LCD 运行原理:为了显示一帧图像,首先在系统的帧缓冲区中存入要显示的图像数据,然后让LCD 控制器的 DMA 地址寄存器指向

16、帧缓冲器的起始地址,读出帧缓冲区的数据到 LCD 控制器的输入 FIFO 队列,由于设计中采用 16 位方式,不需要对 framebuffer 帧缓冲区中的数据进行转换处理,直接把数据送到输出 FIFO 队列,最后将数据送到液晶模块处理,就可以驱动 LCD 显示图像。2.3.3 电源系统S3C2410 使用两种电压供电:内核电压 1.8V、外围电压 3.3V。存储系统的Flash 和 SDRAM、网络控制器 CS8900A、音频控制器 UDA1341TS 都采用典型的 3.3V 的 TTL 电压供电,而 LCD 需要 5V 电压供电,从而系统中共需要 1.8V、3.3V 和 5V 三种不同电平

17、的电压。被系统的电源电路如下所示:系统选用线性稳压源方案,输入电源使用 5V/800m A的电源适配器,经过钽电容滤波后送给外围的 LCD 接口电路提供 5V 电压,同时送到 LDO 芯片,将5V 直流变为 3.3V,并经过滤波在经过一个 LDO 芯片,变为 l.8V 供处理器内核。2.3.4宿主机接口本系统用到的宿主机接口主要包括:并口、UART串口。其中,开发板的J-TAG接口通过 20PIN 排线与仿真器相连,仿真器再通过并口线与宿主机并口相连,J-TAG 接口在本系统中用来配合 Embest IDE 软件将系统的内核及文件系统烧写到 Nand Flash 存储器,而 UART 串口则是

18、系统开发时,宿主机用来操作目标板的控制台接口。本系统目标板设计采用标准的20 针接口,以方便连接各种标准的仿真器。其JTAG接口原理图如下:三、嵌入式系统开发软件环境构建3.1交叉编译环境搭建交叉编译环境的硬件支持为: 宿主机:PC 一台,安装 Windows 7操作系统,安装 cygwin 软件。PC 机有串口(或是 USB 转串口)和并口同目标板通信。 交叉编译软件:从 上下载 cygwin,这里用 1.5.1 版本,在 Windows 7上安装。从 下载交叉编译工具 cross-armtools-linux.tar.bz2,将其拷贝到 cygw

19、in/tmp 目录下。运行 cygwin,执行以下命令完成 cygwin 环境下 Linux 交叉编译工具安装:cd/usrar -xvjf /tmp/ cross-armtools-linux.tar.bz2ls arm-linux正确解压后,可以看到多了一个 arm-linux 目录,即交叉编译工具安装目录。写一个shell 文本 set_linux.sh,来设置 cygwin 下程序开发的环境变量,以便搭建一个 Linux 开发、编译和应用程序测试的环境。shell 文本代码如下:#!/bin/sh # set_linux.sh /* 交叉编译工具安装目录 */ export CROSS

20、DIR="/usr" /* 存放源代码和测试程序 */ export SOURCEDIR="/tmp/edukit-2410" /* 存放 vivi,linux,fs,gui and examples(debug) */ export WORKDIR="/usr/local/src/edukit-2410" /* 存放可执行文件 */ export INSTALLDIR="/home/app" if -d $SOURCEDIR ; then echo $SOURCEDIR else echo "Creat

21、ing directory: "$SOURCEDIR mkdir -p $SOURCEDIR fi if -d $WORKDIR ; then echo $WORKDIR else echo "Creating directory: "$WORKDIR mkdir -p $WORKDIR fi if -d $INSTALLDIR ; then echo $INSTALLDIR else echo "Creating directory: "$INSTALLDIR mkdir -p $INSTALLDIR fi export LIBDIR=&qu

22、ot;-L$CROSSDIR/arm-linux/lib/ -L$CROSSDIR/lib/gcc-lib/arm-linux/2.95.3" CROSS="arm-linux-" export CC=$CROSS"gcc" export AS=$CROSS"as"export LD=$CROSS"ld" export CFLAGS="-O2 -fomit-frame-pointer" export CPPFLAGS="-I$WORKDIR/kernel/include -I

23、$CROSSDIR/arm-linux/include -I$CROSSDIR/lib/gcc-lib/arm-linux/2.95.3/include" export LDFLAGS=$LIBDIR export GCCMISC="$CROSSDIR/lib/gcc-lib/arm-linux/2.95.3/" export PATH="$CROSSDIR/bin:$CROSSDIR/arm-linux/bin:$GCCMISC:$PATH" echo $PATH 运行 cygwin,执行以下命令: source /tmp/edukit-24

24、10/set_linux.sh arm-linux-gcc v3.2 Bootloeder的移植Bootloader 是硬件上电后执行的第一段程序,负责硬件的初始化和操作系统内核的引导。通过这个引导程序,建立内存空间的映射,将系统的软硬件环境设置到合适的状态,最终完成操作系统引导、装载和运行。本课题 Bootloader 选用 vivi,因为它对 S3C2410 有很好的支持,其最大的优点是直接支持 Nand Flash。Vivi启动详细过程:在对 VIVI 进行基本的修改之后,运行以下命令进行编译: source /tmp/edukit-2410/set_linux.sh cd /usr/l

25、ocal/src/edukit-2410/vivi make clean make menuconfig makemake menuconfig 命令对 VIVI 进行配置(如图 3-4)。选择 Load an alternate configuration File,选择已生成的配置文件 smdk2410,选择保存退出。然后执行make 命令,生成 VIVI 的可执行映像文件。本项目中要把 VIVI 烧写进 Nand Flash,首先运行 Flash 烧写软件 Flash Programmer,选择要烧写的文件为 Nand Flash 的配置文件,烧写芯片为 Nor Flash,烧写地址为

26、0X00000000-0X00020000,对应本系统中 AM29LV160DB 芯片的扇区为:1 至 5。如下Flash Programmer 配置图。烧写完成后,给目标板复位,如烧写成功,则可通过超级终端看到相关运行信息.3.3 Linux内核的移植内核是 Linux 系统的核心,用来提供用户层程序和硬件之间的接口,执行发生在多任务系统中的实际任务转换,处理读写磁盘的需求,处理网络接口,以及管理内存等。首先从 /pub/Linux/kernel/网站上下载内核源码包,Linux-2.4.18.tar.bz2,放进 cygwin 的/tmp/edukit-

27、2410/目录下,在 cygwin 中执行以下命令完成 Linux 源代码安装: source /tmp/edukit-2410/set_env_linux.sh cd usr/local/src/ edukit-2410 tar xvjv /tmp/linux-2.4.18.tar.bz2 ls ···kernel···正确解压后,可以看到多了一个 kernel 目录,即 kernel 源代码安装目录。进入 kernel 目录,执行以下命令,为内核植入支持 S3C2410 的补丁: cd kernel patchp1/tmp/edu

28、kit-2410/linux-2.4.18-rmk7- kit2410.patch 编译步骤: 进入内核目录,修改 kernel 目录下的 Makefile 文件,指定目标代码类型和编译器:ARCH:=arm CROSS_COMPILE=arm-linux- 其中 ARCH:=arm 说明目标是 ARM 体系;CROSS_COMPILE=arm-linux-说明交叉编译器的前缀是 arm-linux-。 在 cygwin 中执行以下命令,完成 Linux 的编译过程: source /tmp/edukit-2410/set_linux.sh cd user/lo

29、cal/src/edukit-2410/kernel make mrproper make xconfig 执行完 make xconfig 命令后,本系统中对 Linux 内核的关键配置如下,其中*和<*>表示该选项加入内核编译;和<>表示不选择该选项;<M>表示该选项作为模块编译内核,即可以动态加载和卸载该模块。1) 增加对模块的支持 Loadable module support-> *Enable loadable module support/使内核支持加载模块*Module unloading/使内核支持卸载模块2)配置文件系统 File

30、system-> <*>Compressed ROM file system support 支持本系统使用的 CRAMFS File System 目标板上电,在超级终端可以看到 vivi 启动信息,输入空格键使 vivi 进入命令状态,然后打开 Embest IDE 软件,加载下载配置文件,与目标板进行连接,连接好后点击 IDE 的 Stop 按钮,配置 Debug 的 Download 地址为 0X30000000,下载的文件选择 z Image,点击 Download 进行下载,下载完成后,点击 IDE 的Start 按钮,在超级终端中输入: load flash k

31、ernel x 如果烧写成功,重启目标板,vivi 就可以引导 Linux 内核了,可通过超级终端看到相关运行信息如图所示,则说明内核己经移植成功,可以在开发板上运行了。四、Qt图形界面的编程及实现构建一个带QTOPIA 图形界面的文件系统,需要拷贝编译产生的可执文件、动态链接库、字库以及相关配置文件。可按以下步骤把已编译的QTOPIA 图形界面文件加入到Linux 文件系统: (1) 建立一个可用的无图形界面的cramfs,在第三章我们已经做好;(2)把无图形界面cramfs 文件系统存放于$WORKDIR/root-qtopia/目录下,并在该目录下建立一个名为qt 的文件夹用于存放QTO

32、PIA 运行文件; (3)从/usr/arm-linux/lib/目录下拷贝程序运行所需函数库到$WORKDIR/root-qtopia/lib,替换无文件系统的lib 目录; (4)从已编译QTOPIA目录拷贝以下目录及相关文件到$WORKDIR/root-qtopia/qt/目录: apps:QTOPIA 属性页配置文件目录 bin:执行文件目录 etc:程序配置及杂项文件il8n:语言配置目录 include:包含文件目录lib:动态函数库目录pics:图片及应用程序图标存放目录plugins:动态函数库存放目录services:界面服务程序存放目录sounds:事件声音文件存放目录五、

33、基于Qt/Embedded的应用程序设计使用 Qt/Embedded 设计程序一般需要编写三种类型的文件:头文件(.h)、实现文件(.cpp)和主函数文件(main.cpp)。头文件用来定义各种类;实现文件用于实现头文件中定义的构造函数及实现函数;主函数文件中包括启动和主窗口设置等。Qt/Embedded 应用程序的开发流程如下图:Qt 拥有十分强大的类库,这些类带有构建跨平台服务器与客户端程序的底层构造函数。Qt 的类库可以分成三部分:组件、框架、效用工具。其中,组件包括环境、主窗口、标准对话框、高级窗口部件等;框架包括对象、模型、窗口部件外观等;效用工具包括图像处理、I/O 处理和杂项等。

34、在程序设计中最常用的类包括 QObject、Qapplication、QWidget、QMainwindow、QLayout、QEvent。主要类的继承树:5.1动感界面的欢迎程序设计在 PC 机上用 shell 编程完成以下文件: (1)编写头文件(.h) #include <qwidget.h> /*Hello 类说明*/ class Hello : public QWidget Q_OBJECT public: Hello( const char *text, QWidget *parent=0, const char *name=0 ); signals: void cli

35、cked(); protected: void mouse Release Event( QMouse Event * ); void paint Event( QPaint Event * ); private slots: void animate(); private: QString t; int b; ; qwidget.h 是 Qt 的组件类,当 Timer 溢出时,在该 hello 类中调用成员函数animator(),使文字带有动感。(2)编写实现文件(.cpp) /*包含 hello.h 头文件*/ #include "hello.h" #include

36、<qpushbutton.h> #include <qtimer.h> #include <qpainter.h> #include <qpixmap.h> /*创建一个 Hello 组件,设置一个 40ms 的动感时钟*/ Hello:Hello( const char *text, QWidget *parent, const char *name ) : QWidget(parent,name), t(text), b(0) QTimer *timer = new QTimer(this); connect( timer, SIGNAL(t

37、imeout(), SLOT(animate() ); timer->start( 40 ); resize( 260, 130 ); /*每次定时时间一到,private slot 即被调用*/ void Hello:animate() b = (b + 1) & 15; repaint( FALSE ); /*处理 Hello 组件的鼠标按钮释放事件,在组件内当鼠标被释放时发出clicked()信号*/ void Hello:mouse Release Event( QMouse Event *e ) if ( rect().contains( e->pos() ) )

38、 emit clicked(); /*处理 Hello 组件的 paint 事件,文字首先画在像素图上,然后像素图被拷贝到屏幕上*/ void Hello:paint Event( QPaint Event * ) static int sin_tbl16 = 0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38; if ( t.is Empty() ) return; /*计算一些尺寸,位置等*/ QFont Metrics fm = font Metrics();int w = fm.width(t) +

39、 20; int h = fm.height() * 2; int pmx = width()/2 - w/2; int pmy = height()/2 - h/2; /*创建像素图并用组件的背景图填充它*/ QPixmap pm( w, h ); pm.fill( this, pmx, pmy ); /*画像素图波浪效果*/ QPainter p; int x = 10; int y = h/2 + fm.descent(); int i = 0; p.begin( &pm ); p.set Font( font() ); while ( !ti.is Null() ) int i

40、16 = (b+i) & 15; p.set Pen( QColor(15-i16)*16,255,255,QColor:Hsv) ); p.draw Text( x, y-sin_tbli16*h/800, t.mid(i,1), 1 ); x += fm.width( ti ); i+; p.end(); /*拷贝像素图到 Hello 组件*/ bit Blt( this, pmx, pmy, &pm ); qpushbutton.h,下压按钮组件,用户可以按下或释放该按钮,它可以管理自己的外观,具体定义在 qpushbutton.h 中;qpainter.h,qpixma

41、p.h 分别是画图、像素图组件。 (3)编写主函数文件(main.cpp) #include "hello.h"/嵌入自己生成的头文件 #include <qapplication.h> /*解析命令行,创建一个显示在 Hello 组件上的消息字符串*/ int main( int argc, char *argv ) QApplication a(argc,argv); QString s; for ( int i=1; i<argc; i+ ) s += argvi; if ( i<argc-1 ) s += " " if (

42、 s.is Empty() ) s = "Hello,My Dear Teachers!" Hello h( s ); h.set Caption( "Chengdu University of Technology!" ); QObject:connect( &h, SIGNAL(clicked(), &a, SLOT(quit() ); h.set Font( QFont("times",32,QFont:Bold) ); / 设置默认字体 h.set Background Color( Qt:white ); /

43、 设置默认背景色 a.set Main Widget( &h ); h.show(); return a.exec(); qapplication.h 是所有 Qt 应用程序必须包含的类,它创立了应用程序的对象,来管理整个应用程序,包括整个应用程序范围内的各种资源。main()函数是程序的入口,Qt 在将控制权交给 Qt 库之前,main()函数只需要进行一些初始化工作,然后 Qt 库会通过事件来解释程序用户的操作,在这里 main()函数来实现初始化窗口系统及创建 application 对象。执行完以上命令后会在虚拟缓存中看到如图 所示 hello 效果图。5.2 构造自己的图形化

44、系统在PC 机上打造自己的图形化系统,在 Qtopia 平台上发布需要三个文件:执行文件(.o)、启动器文件(.desktop)和图标文件(.png)。 (1)把生成的欢迎程序、时钟、Media Player 播放器、文件查看器、录音机的可执行程序拷贝到/home/host/qtopia/bin 目录下。 (2)为欢迎程序、时钟、Media Player 播放器、文件查看器、录音机分别选好图标放在/home/host/qtopia/pics 目录下,注意这些图标的格式为.png 格式。(3)在/home/host/qtopia/apps/Applications 下编写自己的启动器文件:欢迎程

45、序启动器文件代码: Desktop Entry Comment=A Hello Program Exec=hello Icon=Amn Type=Application Name=Hello 时钟启动器文件代码: Desktop Entry Comment=A Clock Program Exec=clock Icon=Time Type=Application Name=Clock Nameno=Klokke Namede=Uhr Mediaplay 启动器文件代码: Desktop Entry Comment=A Media Playback Program Exec=mpegplayer

46、 Icon=medeplay Type=Application Mime Type=audio/mpeg;video/mpeg;video/x-msvideo;audio/x-wav Mime Type Icons=Sound Player;MPEGPlayer;MPEGPlayer;Sound Name=Media Player Nameno=MPEGspiller Namede=Medienwiedergabe 文件查看器启动器文件代码: Desktop Entry Comment = A File Manager Program Exec = filebrowser File = ./apps/Applications/filebrowser Icon = filefind Name = File Manager Namede = Datei Manager Nameno = Filviser Type = Application 录音机启动器文件代码: Desktop Entry Comment=A Voice Recording Program Exec=mediarecorder Icon=Sound1 Type=Application Name=Voice Recorder Comment 后面关联的是对程序的描述,在 qtopia

温馨提示

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

评论

0/150

提交评论