本文转载自:http://blog.csdn.net/xteda/article/details/6575278

(作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:http://blog.csdn.net/fqheda )

                                <转载请注名来路>

Technorati 标签: GUI 模块介绍

--------------------------------------------我是分割线--------------------------------------------------------------

嵌入式Linux 系统中UI( 用户界面) 编程需要图形库的支持,图形库可以看作基本的图形绘制支撑库,在嵌入式Linux 系统中比较出名的有QT4 、Gtk+3 、MiniGUI 等,QT4 由QT 公司开发,目前被Nokia 收购;Gtk+3 是开源的图形库,对Linux 提供原生支持;MiniGUI 由北京飞漫公司开发。三者都支持跨平台编译和编程。事实上图形库(GUI )还有很多种,那么如此多的图形库,同时你想图形编程,肯定面临选择的问题,学QT4 好,还是学Gtk+3 好,学MiniGUI 好,还是学MFC (Windows CE/Mobile 流行图形库),其实这些不是学习图形库的关键,因为不同的库提供的接口API 函数不同,编程语言也不同(MiniGUI 和Gtk+3使用C 语言、QT4 和MFC 使用C++ ),编程风格也有很大差异。关键在于学习图形库的核心模块,其实核心模块也不多,主要包括输入控制、输出显示、初级绘图、窗口部件、字库解析和解码、图片解码库 等。

图形库(GUI )核心模块- 输入控制 ,在嵌入式Linux 系统中如果需要用到图形库,输入控制是比较重要的需求,输入控制有几种常用的类型,键盘是其中一个,有些嵌入式系统需要的键盘和PC 机一样,叫Keyboard ,有些需要小键盘如手机,这种通常专业一点的叫法是Keypad ,还有一种是软件键盘,就是在触摸屏上模拟一个键盘(现在智能手机上比较流行),对于图形库来讲键盘有3 个重要的检测量,就是按下(Down) 、弹起(Up )和码字(KeyCode ) ,其中码字和实际的键盘按键一一对应,当然还有特殊,就是组合键;触摸屏是另外一种常用的输入控制,英文名叫TouchScreen ,除了可以模拟一个软键盘,它还可以模拟鼠标(Mouse) ,对于图形库来讲触摸屏有5 个重要的检测量,就是按下(Down) 、弹起(Up )、坐标位置( Axis ) ,单击(Single-clicked) 和双击(Double-clicked) , 目前比较流行手机手势识别(如划拉功能),就是通过这些量的计算和组合来实现的;鼠标(Mouse) 是和触摸屏类似的输入设备,不过在大多数的嵌入式系统中都是用触摸屏来替代鼠标(Mouse) ,所以对于图形库来讲鼠标需要检测的量和触摸屏相同, 也就是说在PC 机上开发嵌入式软件时可以用鼠标模拟键盘。以上嵌入式系统中常用的输入设备,当然还有其它的输入设备,如游戏机操纵杆(Joktick )等都属于比较专用的输入设备了。

图形库(GUI )核心模块- 输出显示 ,如果嵌入式系统没有显示设备,那就不需要图形库(GUI )了,如果用到了图形库(GUI ),添加显示设备就是必须了,嵌入式系统比较常用的显示设备是LCD ,特殊的应用之中也有用CRT 作为显示设备的(如医疗用的监视器),比较而言LCD 最为常用,其实支持CRT 还是支持LCD 是硬件和驱动的事情,对于图形库来讲和输出显示设备最密切的是图象缓冲区(又叫Famebuffer ), 就是说图形库是通过Famebuffer 来显示的,也许Famebuffer 对你来说比较抽象,你可以这么理解,Famebuffer 就是一张白纸,图形库就是带橡皮的铅笔在白纸(Famebuffer )画画,带橡皮的意思是可以在同样的这张白纸上改画的内容,如果用彩笔就可以画彩画了,橡皮也许就要改用涂字液了。除了Famebuffer ,输出显示和图形库相关的还有显示模式,是RGB888 还是ARGB8888 还是RGB565 等,这些和具体的显示(屏)器型号有关系。

图形库(GUI )核心模块- 初级绘图层 ,初级绘图层是图形库(GUI )最基础的绘制模块,如果还要找更基础的那就是打点,打点和显示输出设备的的单个像素(Pixel )对应,是图象显示的最小单元,其它的初级绘图都是以打点函数为基础来实现的 ,如画线,画弧、画椭圆、画长方体、画折线、画扇形、绘字、贴图等等都是用打点来实现的。为什么会有初级绘图模块,初级绘图其实是对现实物体的抽象,看看你的周围,物体都是点、线、圆、面组成,看深一点,到分子元字,那个层次,也是点、线、圆、面组成。所以用最基础的绘制原理上是可以实现对现实中各个实物的绘制和模拟的。事实上图形库(GUI )编程的实践也证明也其正确性。

图形库(GUI )核心模块- 窗口部件 ,窗口部件是基于初级绘图的基础实现, 它应需求而生,就是说窗口部件的底层是初级绘图层,窗口部件是初级绘图层的一种封装实现,如果没有窗口部件,你也可以通过初级绘图层来实现编程,不过这将十分的麻烦,所以为了简化UI 编程,就将常用的 一些初级绘图层实现的部件提取出来,划分为另一个层次就是窗口部件层,它实现的东西比较多,常用的有Label 、Button/PushButton 、Combobox 、Checkbox 、RadioButton 、Hbox 、Vbox 、Groupbox 、SpinBox 、Splash 、TextEdit 、LineEdit 等,相关联的有Backgroud 、Border 、Margin 、Frame 、Style 等。窗口部件可以用来实现其它常用的典型窗口如对话框(Dialog )、主窗口(MainWindows) 、文件管理器(FileManager )等等,这些都属于窗口部件的上一层,在嵌入式系统应用中,UI( 用户界面) 集中在窗口部件的改造、封装和应用上,因为初级绘图层太基础,而之上的的已实现的Dialog 、MainWindows 、FileManager 往往是不能满足需求的 ,所以需要设计自己的差异化的满足实际需求的Dialog 、MainWindows 和FileManager 等等。只有这样才能做出漂亮的界面,最主要是和别人不同(差异化)。

图形库(GUI )核心模块- 字库解析和解码 ,图形库比较总要的另外的模块是字库解析和解码,世界上有多个国家,采用的文字不一样,如何兼容和显示不同的文字(对应不同的字库)就需要用到字库解析和解码,就是说要显示中文就需要中文字库和中文字库解析与解码器,如过要显示英文,就需要英文字库和英文字库解析与解码器,要显示日、韩文就需要日、韩字库和日、韩字库解析与解码器。专业的叫法是国际化和本地化,就像一个会说各种语言的人,不同的场合说不同的语言,字库解析和解码就做同样的事情。

图形库(GUI )核心模块- 图片解码库 ,图片解码库是图形库(GUI )重要的组成模块,图形除了形就是图,所以图的处理是图形库的非常重要组成,图就是图片,在现实世界里图片存在着格式的差异,比较流行的格式用Bitmap 、Jpeg 、Png 、Gif 、Tiff 等,为了支持一个格式必须提供这种格式图片的解码器。图片解码库最常用的有两个方向,一个是用于实现图片浏览器,另外是用于帖图,目的是优化界面,使之显示的漂亮美观。

    学习UI (用户界面)编程就需要学好图形库,而学好图形库不在于学习MFC 还是学习QT4 或者学习Gtk+3,而在于学习图形库的基础实现核心模块,知道图形库能干什么,怎样才能干什么才是UI (用户界面)编程的灵魂。

嵌入式系统图形库GUI核心模块介绍的更多相关文章

  1. 嵌入式系统添加无线wifi模块

    开发环境:fl2440开发板,linux3.0内核,交叉编译器路径/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-,无线网卡RT3070 平时开发板联 ...

  2. ansible的介绍和一些基本模块介绍

    必须保证ansible工作站与各个node实现无密码ssh登入 ①:192.168.1.100 - 在你本地的工作站或服务器上安装 Ansible.   ②:文件服务器1到代理服务器3 - 使用 19 ...

  3. 嵌入式系统WinCE下应用程序GUI界面开发【转】

    嵌入式系统WinCE下应用程序GUI界面开发 ByToradex 秦海 本文旨在介绍嵌入式系统在Wince下进行GUI应用程序开发可以选择的不同GUI开发框架(Framework),目前最常用的几种方 ...

  4. Nginx核心流程及模块介绍

    Nginx核心流程及模块介绍 1. Nginx简介以及特点 Nginx简介: Nginx (engine x) 是一个高性能的web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 ...

  5. 嵌入式系统Linux内核开发工程师必须掌握的三十道题(转)

    嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看! 1) Linux中主要有哪几种内核 ...

  6. C语言嵌入式系统编程修炼之二:软件架构篇

    模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...

  7. Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  8. python之路8-内置模块介绍

    time & datetime模块 1 #_*_coding:utf-8_*_ 2 __author__ = 'Alex Li' 3 4 import time 5 6 7 # print(t ...

  9. C语言嵌入式系统编程修炼

    C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...

随机推荐

  1. RHEL 7 命令行注册和激活订阅服务

    导读 前一阵子,红帽推出了开发者免费使用订阅功能,只要注册成为红帽开发者就可以免费使用包括  RHEL7  在内的开发套件. 今天我们就来看一看怎么使用命令行来快速注册和激活订阅服务,以后就可以方便地 ...

  2. Maximum repetition substring 后缀数组

    Maximum repetition substring Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7578   Acc ...

  3. 1.5.5 Tokenizers

    Tokenizers <fieldType name="text" class="solr.TextField"> <analyzer typ ...

  4. 数据结构【二】:简单阻塞队列BlockingQueue

    在POSIX多线程[一]:简单队列simple queue的基础上使用内部互斥锁和条件变量来控制并发以达到线程安全的目的,其主要用于 [生产者-消费者] 队列. 1.BlockingQueue初始化时 ...

  5. [Arduino] Leonardo 中文介绍

    以下内容均翻译自arduino.cc,水平有限,如有错误请大家指正. 概述Arduino Leonardo是基于ATmega32u4一个微控制器板.它有20个数字输入/输出引脚(其中7个可用于PWM输 ...

  6. Selenium html之于ul标志代码分析与使用

    分析:https://github.com/页面Li <div class="header header-logged-out"> <div class=&quo ...

  7. leetcode 题解 Add Two Numbers(两个单链表求和)

    题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...

  8. hdu 4744 最小费用流

    #include <cstdio> #include <queue> #include <cstring> #include <cmath> #defi ...

  9. 在ios7系统下,scrollView下移20像素

    从设备图库返回到scrollView时,scrollView会下移20像素,解决办法:self.edgesForExtendedLayout = UIRectEdgeNone; 如果加入此代码导致其他 ...

  10. java实现Composite(组合)模式

    组合模式涉及的是一组对象,其中一些对象可能含有其他对象,这些对象也可以含有对象,因此,有些对象代表的是对象群组. Composite模式的设计意图在于:让所有的用户能够用统一的接口处理单个对象以及对象 ...