minigui

 

有钱:用QTE或 Minigui 吧
没钱:用GNU GTK+
硬件太破: 用microwindow吧

如果想让上层应用开发简单,尽可能的用QTE和MiniGUI等,用GTK+也不错 ,用microwindows 上层需要做的工作太多了

 

GTK + 与 QT 的不同主要有:

  • QT 基于 C++ 开发,GTK + 基于 C 语言开发 ,但采用了面向对象的思想;
  • QT 有 QTDesigner 和 KDevelop 等工具,可以组成一个完整的 IDE ,GTK + 只有 Glade ,一个 GUI builder (相当于QTDesiger);
  • QT 具有很好的跨平台性,支持 Linux/Unix、MacOS X 和 Windows,GTK + 主要是 Linux 平台,其它平台的支持正在开发中;
  • QT 本身支持脚本,GTK + 需要嵌入自己的脚本引擎;
  • QT 为数据密集的应用提供了 data-ware widget,GTK + 有一个单独的工程 gnome-db
  • QT 应用与 KDE 桌面通过 DCOP 通信,GTK + 应用与 Gnome 通过 CORBA 通 信;
  • Qt 支持与 Python、 Perl、Scheme等语言的绑定,GTK 实现了与 C++ (GTKmm), Python (PyGTK) 和 Ruby 的绑定;
  • Qt 是双授权,由 Trolltech 公司和社区支持,GTK + 完全开源,由社区支持。

 

在计算机领域中,要了解图形类软件,首先要弄清楚几个概念:

 

  • 图形(Graphics)。图形是从几何角度出发定义的概念;计算机图形学通常讲述如何在计算机屏幕上显示出点、 直线、曲线等几何元素,包括三维物体。
  • 图像(Image)。图像更容易理解些,我们在网络上经常看到的、以 JPEG、PNG 格式化储存的图片或者照片,就属于图像;计算机图像处理通常涉及到图像的压缩编码方法、图像识别算法等。通常,图形处理中会涉及到一些图像相关的内容,比 如,在一个封闭的几何对象(如三角形)表面上,显示出一副图片。

 

从本质上讲,MiniGUI 属于一种图形软件。

 

了解一下计算机系统中图形相关软件的层次关系(参见下图)。

 

 

 

 

底层图形设备支持软件:

在 Linux 操作系统中,FrameBuffer 驱动程序 就是这类软件。

在 Windows 平台中,针对显示卡的驱动程序 也属于这类软件。

 

窗口系统(Window System):

窗口系统是用来以窗口形式展示应用程序可显示区域的软件。

如我们熟悉的 Windows 系统。运行在 Windows 系统上的应用程序可以创建单个或者多个窗口,并在窗口中显示应用程序希望显示的内容。而窗口系统就负责管理这些由不同应用程序创建的窗口,确保他们能够协 调显示在共用的计算机屏幕上。 在 Windows 上,窗口系统以一个标准的操作系统组件形式运行。在 Linux/UNIX 系统中,窗口系统以独立于操作系统的应用程序形式运行,通常使用 X Window(X11)系统。 窗口系统用来管理不同应用程序创建的窗口,确保他们可以共存于同一个计算机显示屏幕之上。通常,这些窗口会互相层叠在一起。 但应用程序在向自己的窗口绘制图形、输出图像时,并不需要知道窗口是不是被其他窗口覆盖。这就是窗口系统的主要功能。另外,处理负责管理计算机屏幕之外, 窗口系统还负责管理键盘、鼠标等输入设备。

 

图形用户界面(Graphics User Interface)程序开发工具包(Toolkit):

在 Windows 系统上,我们一般使用 MFC、Qt 等开发 GUI 应用程序;

在 X Window 上,现在流行使用 Gtk+ 和 Qt 来开发 GUI 程序。

 

矢量图形(Vector Graphics)支持软件:

Adobe Flash 属于典型的矢量图形软件。

有很多矢量图形的支持库,如 Gtk+ 之上的 Cario、Windows 平台上的 GDI+ 等。目前,OpenVG 是渲染二维矢量图形的工业标准;而 SVG 则是矢量图形的 WWW 标准,可嵌入到网页中。


三维图形(Three dimensions graphics)支持软件: 三维图形支持软件用来实现三维物体的渲染,并最终显示在计算机屏幕上。目前,OpenGL 是用来渲染三维物体 的工业标准。

 

图形工具类软件:CorelDraw? 这样的图形工具软件,可用来完成矢量图形的绘制、三维物体的建模等等。

 

大部分人通常会将窗口系统和 GUI Toolkit 混淆在一起。这是因为有些软件仅仅解决特定的需求,而有些软件却同时提供多种功能。比如 Windows 系统,它同时提供操作系统、窗口系统以及图形用户界面 的支持。而在 Linux/UNIX 系统中,X Window 仅仅提供窗口系统 功能,图形用户界面由 Motif、Gtk+、Qt 等提供支持MiniGUI 和 Windows 类似,它即是窗口系统,也是一个图形用户界面支持系统 ,并且以组件的方式提供了对矢量图形和三维图形的支持。

 

  • 底层图形设备支持软件
    • Linux FrameBuffer? 驱动程序。在 Linux 操作系统中,FrameBuffer 驱动程序提供了对显示设备的一种抽象。不管是PC的显示卡还是嵌入式设备的LCD 控制器,都将有一个显示RAM(video RAM,VRAM)区域,代表了要在屏幕上显示的图像。VRAM必须足够大,以处理显示屏幕上所有的像素。程序员通过直接或间接地存取VRAM中的数据来 进行进行图形操作,改变屏幕的显示。许多显示硬件提供从CPU的地址和数据总线直接访问VRAM的能力,这相当于把VRAM映射到了CPU的地址空间,从 而允许更快的VRAM访问速度。VRAM 组成的内存段,就叫帧缓冲区(Frame Buffer)。通常,PC显示器和LCD都是光栅设备,屏幕上的每一点是一个像素,整个显示屏幕就是一个像素矩阵。帧缓冲区中的数据按照显示器的显示模 式进行存储,记录了显示屏幕上每一个像素点的颜色值。我们知道,计算机以二进制方式存储数据,每位有两种状态(0与1)。对于单色显示模式,屏幕上一个像 素点的颜色值只需用帧缓冲区中的一位表示,该位为1则表示该点是亮点。而在彩色显示模式下,要表示屏幕上像素点的颜色信息,需要更多的位或字节。对于16 色显示模式,就需4位来存储一个颜色值。在256色显示模式下,一个像素点占8位即一个字节。在16位真彩色显示模式下,则需要两个字节来存储一个像素点 的颜色值。不管在 PC 上还是嵌入式设备中,我们访问图形设备的目的,就是获取或设置显示芯片或者控制器的一些寄存器,以便设置显示分辨率、颜色深度等信息,然后获得帧缓冲区的 地址,之后,通过操作帧缓冲区中的数据来改变显示器或者 LCD 上的像素。在 Linux 操作系统下,FB 驱动程序的典型用法如下:
      • 调用 open 系统调用,打开 Linux FB 驱动程序。Linux FB 驱动程序的设备名一般为 /dev/fb0 或者 /dev/fb/0。
      • 在打开的 FB 设备上执行 iotcl 命令,获取或者设置其显示模式,包括分辨率、颜色深度等。
      • 在打开的 FB 设备上执行 mmap 系统调用,将帧缓冲区映射到当前进程的地址空间内。
      • 操作 mmap 返回的内存段(即帧缓冲区),从而改变显示屏上的内容。
    • DirectFB ? 。DirectFB 是对包括普通显示设备在内各种图形设备的一种抽象接口。许多应用于多媒体设备(如IPTV、PMP)的显示芯片支持多种显示层。比如在典型的 IPTV 显示芯片中,会提供对 YUV 显示层、普通图形显示层或者 OSD(On Screen Display)层的支持。YUV 显示层用于显示视频输出数据,而图形层或者 OSD 层和 Linux FrameBuffer? 类似。显示芯片会将所有这些层中显示的内容通过叠加最终显示到输出设备上,比如电视或者液晶屏。DirectFB 提供了一组接口,可方便应用程序管理多个显示层,或者向这些层中输出数据。另外,DirecFB 也对输入设备(如遥控器)提供了一定的抽象接口。DirectFB 目前支持 Linux 操作系统,可访问 http://www.directfb.org 获得该软件。
    • WindML ? 。WindML 是 VxWorks 操作系统的一个可选组件,其功能类似 DirectFB?

 

  • 窗口系统
    • X11。X11 即 X Window 是针对 UNIX/Linux 系统的标准窗口系统。
    • MicroWindows ? 。MicroWindows 是 X Window 的一个精简版本,也称为 Nano X。
    • Qt/Embedded。如前所述,在 Windows 或者 X Window 上运行的 Qt 库属于 Toolkit 软件。Qt/Embedded 是 Qt 的嵌入式版本,运行在 Linux FrameBuffer? 之上。为了不依赖于 X Window 等窗口系统,Qt/Embedded 包含了一个小型的窗口系统,称为 QWS。这样,Qt/Embedded 同时具有了窗口系统和窗口管理的功能。

 

  • 图形用户界面工具包
    • Gtk+。Gtk+ 原本运行于 X Window 之上,是 GNOME 桌面环境使用的 GUI Toolkit 软件。但 Gtk+ 也同时可以支持运行在其他窗口系统之上,如 Windows。在嵌入式 Linux 系统中,Gtk+ 可以运行于 DirectFB? 之上。但这种方案下,因为没有窗口系统的支持,只能运行单个图形用户界面应用程序,而不支持多进程环境下的多窗口系统。
    • Qt。Qt 是一个跨平台的 GUI Toolkit 软件,和 Windows 上的 MFC 类似,它提供了一套用 C++ 封装的图形界面应用程序类库。
    • FLTK。FLTK 是一个非常简单的 GUI Toolkit 软件,一般和 MicroWindows? 配合使用。
    • Tilcon。Tilcon 主要运行于 VxWorks 操作系统,提供了多种可应用于工业仪表、航空航天仪器中的构件。

因为 MiniGUI 即是窗口系统软件,也是图形用户界面支持系统,所以,MiniGUI 和上面这些软件并不是互斥关系,相反:

 

  • MiniGUI 可以运行在 DirectFB? (Linux)或者 WindML? (VxWorks)之上。
  • MiniGUI 之上可以运行 Gtk+、FLTK 等 Toolkit。

http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1002.entry

autoconf automake 的完整例程

一、 automake 的用途

automake autoconf 可以自动生成 GNU Makefile ,虽然我们也可以 手工写 Makefile ,但是考虑到在多硬件平台上运行,编译环境差异,依赖关系,静态和动态库的生成,等一系列的问题, 对于复杂的代码树,用 automake 工具就成了更好的选择。

在下面的例程中,将介绍树型源码包的 Makefile 生成,其中包括生成库文件和可执行文件。

 

二、 完整例程

1.   建立目录树

a)          生成目录树

$ mkdir lib

$ mkdir src

$ mkdir include

$ touch include/xy.h

$ touch lib/xy1.cpp

$ touch lib/xy2.cpp

$ touch src/main.cpp

b)         编辑源代码文件

                         i.               include/xy.h 内容如下:

void xytest1();

void xytest2();

                       ii.               lib/xy1.cpp 内容如下:

#include <stdio.h>
void xytest1()

{ printf(“xytest1/n”); }

                      iii.               lib/xy2.cpp 内容如下:

#include <stdio.h>

void xytest2()

{ printf(“xytest2/n”); }

                     iv.               src/main.cpp 内容如下:

#include <xy.h>

main()

{

       xytest1();

       xytest2();

}

2.   autoconf

a)          生成默认的 configure.in

$ autoscan       此时目录下生成 configure.scan

$ mv configure.scan configure.in

b)         编辑 configure.in (为了书写简单,去掉了所有注释)

AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

AM_INIT_AUTOMAKE(xytest, 1.0)  # 此 处是软件名和版本号

AC_PROG_CXX                    # 自 动检测编译器

AC_PROG_CC

AC_PROG_LIBTOOL                # 生 成动态/ 静态库需要LIBTOOL

AC_OUTPUT(Makefile lib/Makefile src/Makefile)  # 此处是输出的文件

c)         自动生成 configure

$ aclocal         它是一个 perl 脚本,根据 configure.in 产生 aclocal.m4

$ libtoolize –force    它会生成 libtool 所需要的工具,主要为生成库做准备

$ autoconf      通过 aclocal.m4 产生 configure

3.   automake

a)          Makefile.am 项层写法,编辑 ./Makefile.am 如下

AUTOMAKE_OPTIONS=foreign

SUBDIRS = lib src

b)         Makefile.am 编译库文件的写法, 编辑 lib/Makefile.am 如下

DEFAULT_INCLUDES=-I../include

lib_LTLIBRARIES = libxy.la

libxy_la_SOURCES = xy1.cpp xy2.cpp

c)         Makefile.am 编译开执行程序的写 法,编辑 src/Makefile.am 如下

DEFAULT_INCLUDES=-I../include

bin_PROGRAMS = main

main_SOURCES = main.cpp

main_LDADD= -L../lib/.libs/ -lxy

d)         生成 Makefile.in

$ automake –add-missing

4.   编译运行(以 arm 为示例)

$ ./configure –host=arm-linux        此时机器上需要有 arm-linux-gcc 系统的编译工具

$ make

$ make install

5.   总结

a)          需要手动编译的只有 configure.in, Makefile.am, 和源代码三处

                         i.               Makefile.am 中的常用设置项

AM_CXXFLAGS= 编译 C++ 程序时所带的 FLAGS

AM_CFLAGS= 编 译C 程序时所带的FLAGS

DEFAULT_INCLUDES= 编 译时加入的include 目录

DEFS= 编 译时定义的DEFIND

b)         注意看执行过程中有无错误提示

 

三、 参考

http://www.ccw.com.cn/htm/app/linux/develop/01_7_25_7.asp

此文档中更加详细地说明了用法和原理,而本文档则更多 的介绍了代码树和库 Makefile 的生成方法

 

内核移植:

 

http://blog.chinaunix.net/u3/94284/article_109261.html


你可能感兴趣的:(windows,linux,qt,makefile,图形,gtk)