资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
上海电力学院上海电力学院课程设计报告题目:题目: 基于基于 ARM 和和 QT 的嵌入式图形用户界面设计与实现的嵌入式图形用户界面设计与实现专业:专业: 自动化(电站) 班级:班级: XXXXXX 姓名:姓名: 学号:学号: 1一、一、Qt 课题研究意义、国内外研究现状及应用分析:课题研究意义、国内外研究现状及应用分析:Qt 是一个跨平台的C+图形用户界面库,是挪威Trolltech 公司的产品。 Qt 是一个全面的C+应用程序开发框架。它包含一个类库,和用于跨平台开发及 国际化的工具。Qt 是用于本地化跨平台应用开发的领先性框架。Qt 应用程序接口与 工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相 关的应用开发与配置。通过使用Qt,开发小组们从主要的开发平台,可为主要操作系 统创建本地化的应用程序。 众多的 Qt 类库构成Qt 的基础。该库可以利用大约400 个面向对象的类,这些类 带有大多数构建跨平台服务器与富客户端应用程序的底层基础构造函数.这些库包括用 于GUI、布局、数据库、国际化、网络与XML 等的类。 在开发用户图形界面中,一个常见并重复发生的系统崩溃与问题源,即如何在不 同组件之间进行通信。对于该问题,Qt 的解决方案为信号与槽机制。信号与槽是Qt 的主要特征,它对促进对象通信提供一个类型安全的方法,并可能是区别于其它多数 框架所提供特征的一个部分。 Qt/Embedded 是一个完整的自包含GUI 和基于Linux 的嵌入式平台开发工具,是 Qt 在嵌入式平台的版本。Qt/Embedded 以原始 Qt 为基础,并做了许多出色的调整以 适用于嵌入式环境。Qt/Embedded 通过 Qt API 与 Linux I/O 设施直接交互,成为嵌 入式Linux 端口。同Qt/X11 相比,Qt/Embedded 很省内存,因为它不需要一个X 服务 器或是Xlib 库,它在底层摒弃了X lib,采用framebuffer(帧缓冲)作为底层图形接口。 同时,将外部输入设备抽象为keyboard 和mouse 输入事件。Qt/Embedde 的应用程序 可以直接写内核缓冲帧,这避免开发者使用繁琐的Xlib/Server 系统。图一、 Qt/Embedded 与Qt/X11 的比较 Qt/Embedded 的底层图形引擎基于Framebuffer。Framebuffer 是Linux 2.2.x 以上 本版内核中的一种驱动程序接口。这种接口采用mmap 系统调用,将显示设备抽象为 帧缓冲区。用户可以将它看成是显示内存的一个映象,将其映射到进程地址空间之后, 就可以直接进行读写操作了,而写操作可以立即反映在屏幕上。framebuffer 驱动程序 是最重要的驱动程序之一,正是这个驱动程序才能使系统屏幕显示内容。其实现分为 两个方面:一是对LCD 及其相关部件的初始化,包括画面缓冲区的创建和对DMA 通 道的设置;二是对画面缓冲区的读写,具体到代码为read、write 等系统调用接口。 Qtopia 是一种全方位的应用程序开发平台,它可用于基于嵌入式Linux 的 PDA(个人数字助理),移动电话,web pads,以及其他移动计算设备。Qtopia 构建 于Qt/Embedded 之上,是专为基于Linux 的消费电子设备提供和创建图形用户界面而 设计的。常见的有2 种版本:QtopiaPhone 版和Qtopia PDA 版。Qtopia Phone 版必须2付费才能得到,而Qtopia PDA 版有免费版本。 输入法:Qtopia 支持两种基本类型的输入法。Qtopia 可由带有少量按键的键盘 驱动,也可由用于触摸屏设备的手写笔驱动。Qtopia 支持众多的文本输入方式,包括 基于键盘的预测键入,可定制的手写识别,以及屏幕键盘输入。此外,还支持数种可 用于亚洲书写系统的第三方输入方式。 国际化支持:Qtopia 内部使用统一的代码,因此可以很方便地针对不同的市场 进行本地化。此外,程序的设计引擎能自动调整比原始文本长或短的翻译文本的按钮 和标签。目前,Qtopia 支持多种语言。 屏幕尺寸/布局:Qtopia 强大的设计引擎支持各种屏幕尺寸以及横向和纵向布局, 包括176208,176220,240320 和480640 (像素)。 程序发布器:Qtopia 含有一个程序发布器。根据使用版本的不同(PDA 或 Phone),程序发布器也会有所不同,但它始终包含一个默认的基于图标的应用程序导 航布局方案。 插件管理器:Qtopia 自带的插件框架使得向设备添加新特性无缝化且便捷。用户 可以添加新字体,插入新的多媒体格式,添加或移除输入方式,插入新的媒体播放器 外观,新的主项,以及许多其他特性。 Qtopia PDA 版本简介:Qtopia PDA 版(Trolltech)是第一个用于嵌入式Linux PDA 的全方位应用程序开发平台。Qtopia PDA 版(Qtopia PDA),名副其实基于 Linux 的PDA 的标准,可为新一代的高级移动计算设备提供稳定的软件平台。Qtopia PDA 运行于Linux 之上,只需占用少量内存就能提供强大的功能。 Qt/Embedded 和Qtopia 开发模式:嵌入式软件开发通常都采用交叉编译的方式进行,基于 Qt/Embedded 与Qtopia 的 GUI 应用开发也采取这样的模式。先在宿主机上调试应用程序,调试通过通过后,经过交 叉编译 移植到目标板上。二、方案设计及功能模块:二、方案设计及功能模块:方案:在 pc 机 linux 系统下安装 qtpia 软件,在安装完成 qtpia 后,利用 Qt 软件设计一个图形化界面“welcome to Qt”,进行“welcome to Qt”的编程,“welcome to Qt”实现的功能为,运行“welcome to Qt”,在开始界面上我们可以看到三个按钮,分别为显示字符串,quit(退出),dialog(对话框)。实现的功能,显示字符串,按 quit 退出程序,点击 dialog 出现对话框,实现人机交互。三、系统硬件平台:三、系统硬件平台:硬件: PC 机 一台 MagicARM2410 教学实验开发平台 一套四、系统软件功能设计,四、系统软件功能设计,程序流程图及代码实现:程序流程图及代码实现:3首先是安装 qtpia,然后进行编程,以实现想要的软件功能。图形化界面软件的功能大致为,运行程序点击按钮会显示一串字符,而通过编程我们可以改变软件的框图大小,软件名字有我们自定义,显示的字符标签也由我们自定义,然后我们可以插入按钮部件,用按钮来控制软件的下一步动作。在对按钮编程时,我们可以自定义它的大小,且可以设置它的一些属性,比如显示按钮,按钮的名字等。然后是对 dialog 按钮进行编程,它实现了显示一个新的对话框,自定义对话框的标题,点击对话框中的按钮,将会关闭新对话框。最后对界面中的图二、程序框图 按流程图我们按以下步骤完成实验:1、首先对主程序进行编写,步骤如下: (1) 进入/zylinux/x86-qtopia 目录,运行set-env 脚本,为本实验设置环境变量,然 后创建文件夹hello。命令行中输入以下命令: $ cd /zylinux/x86-qtopia $ . set-env $ mkdir hello (2) 进入hello 目录,新建文件hello.cpp,并编写如程序清单 9.1 所示的程序,然后 用progen 工具生成工程文件hello.pro。命令行中输入: $ cd hello $ vi hello.cpp $ progen t app.t o hello.pro (3) 使用tmake 工具,生成hello 工程的Makefile 文件。命令行: $ tmake -o Makefile hello.pro (4) 修改Makefile 文件,在LIBS 变量中增加需要用到的库,然后输入make 命令编 译。 LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lqte -lm -lstdc+ $ make (5) 启动虚拟控制台,运行hello 程序,将会得到如图 9.1 所示的实验结果(主机须启开始Button1 Quit显示字符点击退出Dialog新对话框关闭对话框布局4动帧缓冲,必须能够访问/dev/fb0)。命令行: $ cd /zylinux/x86-qtopia $ . set-env $ cd hello $ ./hello qws 或者在终端,启动虚拟缓冲区和 QPE,启动Qtopia 的终端,输入./hello 运行程序。命 令行中输入: $ cd /zylinux/x86-qtopia $ . set-env $ cd hello $ qvfb /创建一个名为app 的QApplication 对象 QLabel *label = new QLabel(“Hello, Qt!“, 0); /创建一个QLabel 部件 label-setAlignment(Qt:AlignVCenter|Qt:AlignHCenter); /设置标签在水平/垂 直方向位于中心位置 label-setGeometry(10, 10, 200, 80); /标签坐标(10,10)和大小(20080) app.setMainWidget(label); /将QLabel 对象插入到主窗口中 label-show(); /显示标签。创建的标签默认不可见。 int result = app.exec(); /进入循环,调用exec()函数,处理来自系统和用户的事 件 return result; 按钮子程序: #include /Qt应用程序必须包含该头文件 #include /使用按钮所需头文件 #include /字体 int main(int argc, char *argv) QApplication button(argc, argv); /创建一个名为button 的QApplication 对象 QPushButton hello(“Hello, Button!“, 0); /创建一个名为hello 的按钮 hello.resize(150, 30); /设置按钮大小为15030 hello.setFont(QFont(“Helvetica“, 18, QFont:Bold); /设置按钮的字体 button.setMainWidget( /将按钮作为主窗口部件 hello.show(); /显示按钮 int result = button.exec(); /进入循环 return result; Quit 子程序: #include /Qt应用程序必须包含的头文件 #include /按钮 #include /字体 int main(int argc, char *argv) QApplication app(argc, argv); /创建一个名为app 的QApplication 类对象 QPushButton quit(“Quit“, 0); /创建按钮“quit”7quit.resize(100, 30); /设置按钮大小 quit.setFont(QFont(“Times“, 18, QFont:Bold); /设置按钮的字体 /将按钮的clicked()信号和app 的quit()槽连接起来,当按钮被按下,程序退出。 QObject:connect( app.setMainWidget( /将
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号