Linux
Download
1 / 36

Linux ??????? - PowerPoint PPT Presentation


  • 190 Views
  • Updated On :

Linux 图形化程序设计. 任课教师:宋健健 主讲人:刘曦. 主要内容. 1.X window 系统介绍 2.Gnome/Gtk+ 程序设计 3.Kde/Qt 程序设计. X 的由来.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Linux ???????' - hide


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Linux

Linux图形化程序设计

任课教师:宋健健

主讲人:刘曦


Linux
主要内容

  • 1.X window系统介绍

  • 2.Gnome/Gtk+程序设计

  • 3.Kde/Qt程序设计


Linux
X的由来

  • X Window于1984年在麻省理工学院(MIT)电脑科学研究室开始开发的,当时Bob Scheifler正在发展分步式系统(distributed system),同一时间 DEC公司的 Jim Gettys 正在麻省理工学院做 Athena 计划的一部分。两个计划都需要一个相同的东西——一套在UNIX机器上运行优良的视窗系统。因此合作关系开始展开,他们从斯坦福(Stanford)大学得到了一套叫做W的实验性视窗系统。因为是根据W视窗系统的基础开始发展的,当发展到了足以和原先系统有明显区别时,他们把这个新系统叫做X。


X window
X window系统的概念

  • 1. X window系统X window系统是建于客户-服务器联结基础上的图形子系统。X window系统独立于系统内核。

  • 2. X服务器和客户端X服务器是一个运行在本地计算机上的程序。它响应来自X客户程序的请求,在屏幕上画图或者读取键盘或鼠标的输入,并将它传给客户端。X客户端是一个用诸如Xlib, Xt的库写成的运用X协议的应用程序。它通过向负责管理自己的X服务器提出对显示和输出资源的请求来使用其他计算机的这些资源。


X window 2
X window系统的概念(2)

  • 3. X协议X协议定义了客户-服务器中应用程序和它的显示的联系。通过这个协议,应用与它的显示被分离开来。


Window 3
window系统的概念(3)

  • 4. Xlib库Xlib库是一个C语言库,它为X协议里的信息交换提供了一个API。

  • 5. X工具包 将常用的素材(如按钮,菜单等)收集到一起就形成了所谓的X工具包(X ToolKit)

  • 6. X窗口管理器X窗口管理器负责安排客户窗口在显示屏幕上的摆放位置,并完成移动窗口和调整窗口尺寸等管理性的工作。


Gnome x
Gnome,X和窗口管理器

  • 新用户对Gnome理解比较困难的一个地方是Gnome和窗口管理器的关系以及Gnome和X的关系。要理解这些关系,就必须分解这3个组件。

  • X窗口系统支持在屏幕上画出图形组件。它是整个系统的基础,提供了所有库函数和支持图形显示的技术。窗口管理器是定义窗口显示方法的软件。

  • Gnome是一个桌面环境,它运行在X窗口系统和窗口管理器之上。Gnome的设计使它不依赖于任何一个窗口管理器。用户可以任意选择他喜欢的窗口管理器。


X window 4
X window系统的概念(4)


X window1
X Window特征

  • 综合前面所述,我们知道X的设计理念是:

  • 计算分布

  • 设备分离

  • 协议独立


X window 21
X Window特征(2)

  • 这样设计带来的好处是:

  • 不论是本地还是网络上的计算,对用户和开发者其look-and-feel来说都是一样的;

  • X Window System不是操作系统的一部分,而仅仅是一个应用,易于开发、维护、移植;

  • X Server是高度可移植的,支持各种语言和操作系统;

  • X Client也是高度可移植的;

  • X支持任何面向字节流的网络协议不论是本地还是远程的;

  • 应用的计算是分布的,性能不受约束。

  • X Application的设计是高度灵活的,只需实现核心功能。

  • X Window System从设计开始时就融入了面向对象的设计理念,大的窗口由小的窗口组成(Widget)。符合软件设计的准则,大大方便了X应用的开发。


Linux
X程序的流程

  • 1. 取得命令行参数;2. 与用户的显示器建立连接;3. 加载资源;4. 按照资源文件设置字体和色彩;5. 决定顶级窗口的位置和大小;6. 生成顶级窗口;7. 设置wm属性,告知wm它希望的大小和位置;8. 为顶级窗口生成图形上下文(graphics context:包含字体,前景背景色彩等信息);


Linux
X程序的流程(2)

  • 9. 设置必须的窗口属性(如colormap等);10.选择希望处理的事件;11.映射顶级窗口,这是它才真正显示出来;12.生成其它窗口,并保存它们的标志供以后访问;13.读取事件,解释并处理它;14.重复13,直到收到退出事件;15.退出时,销毁顶级窗口,关闭与显示器的连接。


Event driven
Event Driven

  • 应用一旦初始化完毕,即进入一个事件循环;

  • 事件循环是个无限循环,它不停地在事件队列中查看X事件;

  • 事件一般说来是由用户与显示器的交互产生的,也包括其它X Client发来的事件以及其它非X应用发来的事件;

  • 如果事件队列中没有事件,它就继续循环;

  • 如果有事件,则调用相关函数来处理它;

  • X Client可以选择它希望响应的事件种类;

  • 如果退出循环,那么程序也就结束了。


Linux1
Linux桌面环境的发展

  • 1.Linux GUI产生的原因。 为了拥有更多的用户,占据一定的市场份额。

  • 2.Linux GUI的主要组成部分a.窗口系统b.窗口管理器:fvwm,twm,gwm c.工具包:Xt, Motif(商业), Qt, GTK+等d.风格


Linux 2
Linux桌面环境的发展(2)

  • Linux发展初期的图形接口FVWM95 AfterStep ……

  • 缺点:是其它操作系统的仿制品,不能提供优秀操作系统所需要的特性。


Linux 3
Linux桌面环境的发展(3)

  • KDE是Linux上第一个真正的桌面。开发KDE的原因是当时X下的桌面缺乏下列特征:

    没有通用的Drag&Drop协议;

    没有基于对话框的桌面配置工具;

    没有一致的应用帮助系统;

    没有统一的应用开发平台;

    没有复合文档平台;

    在应用级没有网络透明性;

    在X下写程序非常乏味。


Linux 4
Linux桌面环境的发展(4)

  • KDE的产生K Desktop Evironment: K无特殊含义 目的:提供一个开放源代码的图形用户接口和开发环境。 基于Troll Technologies公司的Qt库的。Qt库是一个跨平台的C++类库。 但是Qt库不遵从GPL或LGPL协议。


Linux 5
Linux桌面环境的发展(5)

  • KDE给用户带来了下面的好处:

    漂亮的桌面,一致的界面(consistent look&feel);

    完全的网络透明性;

    集成的帮助系统,方便一致的访问;

    国际化(25种语言);

    集中的、对话框驱动的桌面配置;

    大量的KDE应用;


Kde 3
KDE程序设计(3)

  • KDE由以下三大部分组成:

  • KDE桌面环境(包括WM);

  • KDE应用开发平台;

  • KDE办公套件。


Kde 4
KDE程序设计(4)


Kde 5
KDE程序设计(5)

  • KDE开发的特征 :

  • KDE是用C++写成的,完全复合OO设计。由此带来的KDE组件的可重用性和高效率是KDE成功的关键。

    KDE提供给开发者的开发平台类似于微软的MFC/COM/ActiveX(对应于QT/KOM/OpenParts),允许RAD和对现有组件及技术的充分利用。

    KDE应用都是生成一个KApplication对象实例,并从KTopLevelWidget继承。这样开发的KDE应用自动地复合KDE的标准。


Kde 6
KDE程序设计(6)

  • 最简单的Qt应用程序

  • 见程序Qt1.cpp

  • 带消息处理的Qt应用程序

  • 见程序Qt2.cpp


Linux

  • #include <qapplication.h>

  • #include <qpushbutton.h>

  • int main( int argc, char **argv )

  • {

  • //QApplication负责应用程序的初始化、中止、流程控制和进行应用程序的主要设置。

  • QApplication app( argc, argv );

  • QPushButton button("Hello world",0);

  • app.setMainWidget(&button);

  • button.show();

  • return app.exec();

  • }


Linux

  • #include <qapplication.h>

  • #include <qpushbutton.h>

  • int main( int argc, char **argv )

  • {

  • QApplication app( argc, argv );

  • QPushButton *button=new QPushButton( "Hello world!", 0 );

  • hello->resize( 100, 30 );

  • QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit()) );

  • app.setMainWidget(button);

  • butotn->show();

  • return app.exec();

  • }


Linux 6
Linux桌面环境的发展(6)

  • Gnome的产生Gnome的原动力就起源于对KDE许可证问题的不满。Gnome使用的工具包是GTK+。GTK+是一个遵守GPL协议的开发工具包。没有Qt的那些限制。


Gnome
Gnome程序开发

  • 1.什么是Gnome?Gnome (GNU Network Object Model Envirenment)。 从用户的角度看,它是一个集成的桌面环境以及应用程序集合; 从开发人员的角度看,它是一个应用程序的基础开发结构。Gnome是底层X窗口系统和高层窗口管理器软件中间的一个程序设计界面


Gnome 2
Gnome程序开发(2)

  • 2.Gnome开发体系的基础结构Gnome的开发基础结构是围绕一组由ANSI C语言写成的函数库的。Gnome中最基本的工具包是GTK+ ( GIMP ToolKit ),它由两部分组成:GTK和GDK(GIMP Drawing Kit)。GTK层为C语言提供了一个对象模型,并为UI工具包提供了最基本的widget。GDK是Xlib的一个底层包装。


Gnome 3
Gnome程序开发(3)

Application

Gnome libs

GTK

GDK

Glib

Xlib


Gnome 4
Gnome程序开发(4)

  • Gnome库在最高层,它包括帮助例程,类和特殊的widget,并为应用程序提供了一个基础框架。

  • 第二层是GTK库,它是GTK+的一部分。这个库提供了基本的工具包和widget(如按钮,标签和输入框等)来创建GUI应用程序。大多数GUI是直接用GTK编写的,它同时为Gnome库提供了一个功能强大的对象系统。

  • 再下一层是GDK,它简单地对X函数库进行了包装,只有在我们进行特殊绘画或者设置窗口的特殊属性的时候,我们才需要用到它。

  • 最下面的一层是Glib,它是C的一个实用程序库,包括可移植性和一些实用程序功能,以及一些容器类,例如,链表,可变数组等有用结构。


Gnome 5
Gnome程序开发(5)

  • 第一个例子程序。演示Gnome程序的主要框架。

  • 见程序gnome1.c。演示


Linux

#include <gnome.h>

int main(int argc,char *argv[])

{

GtkWidget *app;

gnome_init ("example","0.1",argc,argv); app=gnome_app_new("example","Window Title");

gtk_widget_show(app);

gtk_main();

return 0;

}


Gnome 6
Gnome程序开发(6)

  • 第二个例子程序。演示按钮素材的使用以及用户事件的处理(消息传递)。

  • 见程序gnome2.c


Linux

#include <gtk/gtk.h>

static void button_clicked(GtkWidget *button,const char *data)

{

g_print(data);

}

int main(int argc,char *argv[])

{

GtkWidget *app;

GtkWidget *button;

gtk_init(&argc,&argv);

app=gtk_window_new(GTK_WINDOW_TOPLEVEL); button=gtk_button_new_with_label("Hello,\n GNOME world!"); gtk_signal_connect(GTK_OBJECT(app),"delete_event",GTK_SIGNAL_FUNC( gtk_main_quit),NULL); gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(button_clic ked),"Ouch!\n"); gtk_container_add(GTK_CONTAINER(app),button); gtk_widget_show_all(app); gtk_main();

return 0;

}


Gnome 7
Gnome程序开发(7)

  • #define gtk_signal_connect(object,name,func,func_data)Attaches a function pointer and user data to a signal for a particular object.The GtkSignalFunction takes a GtkObject as its first parameter. It will be the same object as the one you're connecting the hook to. The func_data will be passed as the last parameter to the hook.


Gnome 8
Gnome程序开发(8)

  • gtk_signal_connect(object,name,func,func_data)

  • object : the object associated with the signal, e.g. if a button is getting pressed, this is that button.

  • name : name of the signal.

  • func : function pointer to attach to the signal.

  • func_data : value to pass as to your function (through the marshaller).

  • Returns : the connection id.