嵌入式用户图形界面编程 课程目的 了解嵌入式图形系统 掌握QT/E开发环境、关键技术 通过实例熟悉基于Qt/E的嵌入式GUI设计.

Slides:



Advertisements
Similar presentations
面向对象与设计模式 RD 常见编程范式介绍  并行编程 - Process-orientedProcess-oriented  组件编程 - Component-basedComponent-based  事件驱动 - Service-oriented,Time-drivenService-orientedTime-driven.
Advertisements

第1单元 操作系统概论 第一节 绪论 操作系统定义.
移动应用软件开发技术 第四讲:Meego应用开发基础
操作系统原理 Principles of Operating System
基于ARM和linux的开发 华中科技大学 武汉创维特 2017/3/20.
UI(用户界面)集训班 Illustrator 高级班.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
QT编程简介 李杨 Qt系列讲座 组织:柴树杉 1. Qt编程简介 智能仿生,柴树杉 2. 创建主窗口程序 3. Qt+VTK开发三维应用
Android快速开发入门 巫文杰、Android工程师 讲师的CSDN博客地址
Qtopia 编程部分要点分析 苗忠良.
Qt Quick 4小时入门 安晓辉(foruok)
第9章 嵌入式Linux用户图形界面编程.
Android开发入门 -----Android 开发“Ready go!” 主讲:李晓蕾
Windows 8 more simple more powerful more free.
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
第二讲 搭建Java Web开发环境 主讲人:孙娜
学习前的准备工作 讲师:burning.
主流嵌入式Linux下GUI解决方案 基本概念介绍 GUI (graphical user interfaces)
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
存储系统.
大学计算机基础 典型案例之一 构建FPT服务器.
SVN服务器的搭建(Windows) 柳峰
Qt移植.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
大数据管理技术 --NoSQL数据库 HBase 陈 辉 大数据分析技术.
Visual Studio Team System 简介
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
嵌入式系统设计与实例开发 ——ARM与C/OS-Ⅱ 北京航空航天大学 智能嵌入式技术工作室 王田苗 魏洪兴.
Windows 7 的系统设置.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
三:基于Eclipse的集成开发环境搭建与使用
程序设计工具实习 Software Program Tool
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
$9 泛型基础.
_01Win32简介与IDE简介 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第四章 团队音乐会序幕: 团队协作平台的快速创建
VisComposer 2019/4/17.
Platform Builder使用介绍 WINCE系统应用开发流程说明 ACTION RDC 杨 涛 2005.Dec.3th
分裂对象模型 C++ otcl.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
Python 环境搭建 基于Anaconda和VSCode.
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
ARM裸机第一部分-ARM那些你得知道的事
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
基于列存储的RDF数据管理 朱敏
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
Presentation transcript:

嵌入式用户图形界面编程 课程目的 了解嵌入式图形系统 掌握QT/E开发环境、关键技术 通过实例熟悉基于Qt/E的嵌入式GUI设计

1、嵌入式图形系统简介 1.1 Linux图形系统的发展史 linux本身没有图形界面, linux现在的图形界面的实现只是linux下的应用程序实现的。

1、嵌入式图形系统简介 1.1 Linux图形系统的发展史 图形界面并不是linux 的一部分,linux只是一个基于命令行的操作系统linux和Xfree的关系就相当于当年的DOS和 WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是 DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样XFree只是linux下的一个应用程序 而已,不是系统的一部分。

1、嵌入式图形系统简介 1.1 Linux图形系统的发展史 但是X的存在可以方便用户使用电脑。WINDOWS95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面 windows就不成为windows了,但linux却不一样,没有图形界面linux还是 linux,很多装linux的 WEB服务器就根本不装X服务器。这也是WINDOWS和linux的重要区别之一。

1、嵌入式图形系统简介 1.1 Linux图形系统的发展史 X Window:业界标准 Open Look:来自SUN与AT&T Motif :来自IBM/HP的OSF CDE :UNIX的标准图形界面 QT : KDE 的开发基础 GNOME :信仰的产物

1、嵌入式图形系统简介 1.2 嵌入式图形系统的发展史 早期嵌入式系统功能简单,对图形用户界面需求并不是太大。而且当时的图形系统对硬件要求太高,在嵌入式上实现几乎没有可能。 后来,应市场需求产生一些高级GUI工具包,使得嵌入式linux下的图形开发成为可能,而且易于编写出更好、更漂亮的界面。

1、嵌入式图形系统简介 1.3 常用的几种嵌入式GUI工具包 紧缩的 X Window 系统 MicroWindows MiniGUI OpenGUI Qt/ Embedded

1.3.1 TinyX TinyX,是标准X-Windows在嵌入式系统的小巧实现,作为一个图形环境,X-Windows是成功的,但由于在体系接口上的原因,限制了它对游戏、多媒体的 支持能力。

1.3.2 Microwindows Mirowindows是嵌入式系统中广为使用的一种图形用户接口,其官方网站是:http://www.microwindows.org。这个项目的早期目标是在嵌入式Linux平台上提供和普通个人电脑上类似的图形用户界面。 MicroWindows,其主要特色在于提供了C/S体系结构,同时也提供了相对完善的图形功能。但却无任何硬件加速能力,图形引擎中也存在着许多未经优化的低效算法。

1.3.2 Microwindows Microwindows的核心基于显示设备接口,因此可移植行很好,microwindows有自己的Framebuffer,因此它并不局限于Linux开发平台,在eCos、FreeBSD、RTEMS等操作系统上都能很好地运行。 此外,Microwindows能在宿主机上仿真目标机。这意味着基于Linux的Microwindows应用程序的开发和调试可以在普通的个人电脑上进行,而不需要使用普通嵌入式软件的“宿主机-目标机”调试模式,从而大大加快了开发速度。 Mincrowindows是完全免费的一个用户图形系统。

1.3.3 MiniGUI MiniGUI是由北京飞漫软件技术有限公司主持的一个自由软件项目(遵循GPL条款),其目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。 MiniGUI为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形。用户也可以利用MiniGUI建立菜单、按钮、列表框等常见的GUI元素。

1.3.3 MiniGUI 用户可以将MiniGUI配置成“MiniGUI-Threads”或者“MiniGUI-Lite。

1.3.4 OpenGUI OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。

2,QT/E Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界面的工具包。Qt是挪威Trolltech软件公司的产品,它为各种系统提供图形用户界面的工具包,QtE就是Qt的嵌入式版本。

2,QT/E 注意:QT 与 QT/Embedded 的区别

  2,QT/E

2.1 QT/E 特点 2.1.1 跨平台 可支持的平台包括: ◆ MS/Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP; ◆ Unix/X11 Linux、Sun Solaris、HP-UX、Compaq True64Unix、IBM AIX、SGI IRIX 和很多其它X11 平台; ◆ Macintoshi Mac OSX; ◆ 嵌入式的,包含有FramBuffer 的Linux 平台。

2.1 QT/E 特点 2.2.2 资源丰富 trolltech 的主页:http://www. trolltech.com/ 支持匿名访问的FTP: ftp://ftp.trolltech.com 新闻组服务器:nntp.trolltech.com 非官方的Qt 文档中文翻译小组: http://www.qiliang.net/qt/index.html

2.1 QT/E 特点 2.2.3 工具丰富 提供了构建(qmake)、可视化设计(uic和qdesigner)、国际化(linguist)、文档系统(assistant)等一系列非常好用的工具。尤其是文档系统,绝对可以称得上是出色。

2.1 QT/E 特点 2.2.4 丰富的API函数 Qt/Embedded 也可以看成是一组用于访问嵌入式设备的 Qt C++ API; Qt/Embedded 的Qt/X11,Qt/Windows 和Qt/Mac版本提供的都是相同的API和工具。

2.1 QT/E 特点 2.2.5 运行需要资源少、功能强大 相对X窗口下的嵌入解决方案而言, Qt/Embedded只要求一个较小的存储空间(Flash)和内存。Qt/Embedded可以运行在不同的处理器上部署的Linux系统,只要这个系统有一个线性地址的缓冲帧并支持C++的编译器。

2.1 QT/E 特点 2.2.6 功能可裁减 Qt/Embedded 提供了大约200个可配置的特征,

3,QTOPIA 3.1 简介 Qtopia是基于 Qt编写的一个用于手持设备的 用户信息管理软件,它集成了很多实用的程序。 市面上买到的预装 linux操作系统的 arm9开发版,开机后看到的图形界面多是qtopia。

3,QTOPIA 3.1 简介

QTOPIA or Other Application 3.2 QTE和Qtopia开发模型 Linux Kernel Frame-buffer QT/Embedded QT/X11 Xlib X Window Server QT API QTOPIA or Other Application

课堂回顾 1,什么是frameBuffer? 2,QT 与 QT/E 最大的不同? 3, QTOPIA与QT的关系?

4, QTE开发环境搭建 宿主机移植所需工具及环境变量声明: 工具软件 描述 变量声明 Tmake-1.11 生成Makefile文件 TMAKEDIR/TMAKEPATH /PATH Qt-x11-2.3.2 Qvfb-虚拟帧缓存工具 Uic-用户界面编辑器 Designer Qt 图形设计器 LD_LIBRARY_PATH_/PATH Qt-embedded-2.3.7 Qt库支持 libqte.so QTEDIR/LD_LIBRARY_PATH/PATH Qtopia-free-1.7.0 应用程序开发包 桌面环境 QPEDIR/LD_LIBRARY_PATH/PATH

4,QTE开发环境搭建 4.1 tmake 安装 tar xfvz tmake-1.11.tar.gz mv tmake-1.11 tmake export TMAKEDIR=$PWD/tmake export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++

4,QTE开发环境搭建 4.2 QT编译 tar xfvz qt-x11-2.3.2.tar.gz mv qt-2.3.2 qt-x11 cd qt-x11 export QTDIR=$PWD echo yes | ./configure -static -no-xft -no-opengl -no-sm make -C src/moc cp src/moc/moc bin make -C src make -C tools/designer make -C tools/qvfb cp tools/qvfb/qvfb bin strip bin/uic bin/moc bin/designer bin/qvfb

4,QTE开发环境搭建 4.3 QTE编译 tar xfvz qt-embedded-2.3.7.tar.gz mv qt-2.3.7/ qt cp qt-x11/bin/?* qt/bin export QTDIR=$PWD/qt export QPEDIR=$PWD/qtopia export TMAKEDIR=$PWD/tmake export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++ export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH cd qt make clean cp ../qtopia/src/qt/qconfig-qpe.h src/tools/ (echo yes; echo yes ) |./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32 make -C src

4,QTE开发环境搭建 4.4 QPE编译 tar xfvz qtopia-free-1.7.0.tar.gz mv qtopia-free-1.7.0 qtopia cd qtopia/src ./configure -platform linux-generic-g++ make

4,QTE开发环境搭建 4.5 运行

当在PC上模拟Qtopia的运行时,需要用到对应Qt版本的库文件,因此需要修改/etc/ld. so 当在PC上模拟Qtopia的运行时,需要用到对应Qt版本的库文件,因此需要修改/etc/ld.so.conf 文件以适应刚刚安装的Qt(Redhat安装时带有Qt库,但不适合我们最新安装的版本),修改后的ld.so.conf文件内容如下: /sbc2410/x86-qtopia/qt/lib /sbc2410/x86-qtopia/qtopia/lib /usr/kerberos/lib /usr/X11R6/lib /usr/lib/sane 修改完此文档后,为了让刚刚安装的库生效,必须运行ldconfig。 至此Qt的开发缓建已经建立。

(1)设置环境变量 export QTDIR=$PWD/qt export QPEDIR=$PWD/qtopia export TMAKEDIR=$PWD/tmake export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++ export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH (2)启动虚拟帧缓存 “$ qvfb &” 或“$ qvfb -width 640 –height 480 &” (3)运行qtopia qpe &

5,QTE开发关键技术 5.1 信号与插槽 信号和槽用于对象间的通讯。信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分。

信号与插槽 回调技术特点: 他们不是类型安全的 其次回调和处理函数是非常强有力地联系在一起的

信号与插槽 信号与插槽机制特点: 类型安全 信号和槽是宽松地联系在一起的 速度慢

信号与插槽

信号与插槽

信号与插槽 一个最小的C++类声明如下: class Foo { public: Foo(); int value() const { return val; } void setValue( int ); private: int val; };

信号与插槽 一个小的Qt类如下: class Foo : public QObject { Q_OBJECT public: Foo(); int value() const { return val; } public slots: void setValue( int ); signals: void valueChanged( int ); private: int val; };

信号与插槽 槽可以由应用程序的编写者来实现。这里是Foo::setValue()的一个可能的实现: void Foo::setValue( int v ) { if ( v != val ) { val = v; emit valueChanged(v); }

信号与插槽 把两个对象连接在一起的一种方法: Foo a, b; connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int))); a.setValue( 79 ); // a == 79 b == 79 b.setValue( 11 ); // a == undefined b == 11 b.value();

信号与插槽 5.2 元对象编译器(MOC) 作用 MOC是用来专门处理QT对C++的扩展部分 用法

6,实例一 一、代码编辑 二、程序编译

#include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

#include <qpushbutton.h> #include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

int main(int argc, char ** argv) #include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

#include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

QPushButton hellobtn("Hello world!", 0); #include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

#include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

#include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

#include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

#include <qapplication.h> #include <qpushbutton.h> int main(int argc, char ** argv) { QApplication a(argc, argv); QPushButton hellobtn("Hello world!", 0); hellobtn.resize(100, 20); a.setMainWidget(&hellobtn); hellobtn.show(); return a.exec(); }

6,实例一 二、程序编译 1,生成工程文件 Progen –o test.pro 2,生成Makefile Tmake –o Makefile test.pro 3, 编译 make

6,实例二 一、工程创建 二、界面设计 三、代码编辑 四、程序编译

6,实例三(信号与槽) 一、工程创建 二、界面设计 三、代码编辑 四、程序编译

课堂回顾 1、怎样将信号连接到槽? 2、能否将多个槽连接到一个信号? 3、是否能将一个信号连接到其他信号?如果能,应该怎样操作? 4、如果编译器报告connect的参数错误,通常会是什么错误?

7,QT编程模式讨论 基本模式 子类继承模式 ui.h模式

基本模式

子类继承模式

子类继承模式 子类继承模式缺点: 初学者接受困难 多写了很多代码,增加了出错的几率 类几乎翻番的增加,严重影响了编译速度和代码大小。

ui.h模式

8,向QPE中添加自己的程序 Qtopia是基于Qt的一个桌面程序,往其中安装应用程序需要一个桌面文件,图标文件以及相应的可执行文件。

8,向QPE中添加自己的程序 Qpe目录介绍 步骤

9, Qt/Embedded开发模型 嵌入式软件开发通常都采用交叉编译的方式进行,基于Qt/Embedded和Qtopia的GUI应用开发也采用这样的模式。先在宿主机上调试应用程序,调试通过后,经过交叉编译移植到目标板上。 Qt/Embedded直接写入帧缓存,在宿主机上则是通过qvfb(virtual framebuffer)来模拟帧缓存。qvfb是X窗口用来运行和测试Qtopia应用程序的系统程序。qvfb使用了共享内存存储区域(虚拟的帧缓存)来模拟帧缓存并且在一个窗口中模拟一个应用程序来显示帧缓存,显示的区域被周期性的改变和更新。

9, Qt/Embedded开发模型 交叉编译: export QTDIR=$PWD/qt export QPEDIR=$PWD/qtopia export TMAKEDIR=$PWD/tmake export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH cd qt make clean cp ../qtopia/src/qt/qconfig-qpe.h src/tools/ (echo yes ; echo no) | ./configure -platform linux-arm-g++ -qconfig qpe -depths 16,24,32 make -C src cd .. cd qtopia/src ./configure -platform linux-arm-g++ make

课堂回顾 形成对QTE开发的自己的理解。 如果编译中显示缺少uuid库怎么办? 编译时显示无法识别cos,sin等函数如何解决? 如果使用QT Designer设计界面后,用uic工具生成cpp文件时为空是怎么回事?