C/C++编程GUI库比较

转自:http://blog.csdn.net/lostown/article/details/658654html

最强的GUI库当属Qt,毕竟是商业化的东西,功能最完整,什么都好,包括相似java代码风格,良好的框架设计,但有几点值的一提:java


     1.它没有使用STL,而是本身实现了一套替代方案QTL;
     2.事件模型使用自创的signal/slot机制,因此须要moc.exe来预处理头文件;
     3.对皮肤的支持不是很好,须要本身写Style类来定义各类控件的Paint;python


    因此站在Qt的视角去比较全部其余的开源库,相信这样能为你做出正确的选择。c++


     1. GTK+
    gtk+用C语言的面向对象的设计方法,框架设计良好,它可能会比Qt性能好。LGPL协议,能够做商业用途,支持皮肤(theme/GtkStyle),支持XML定义界面,有设计器支持(glade),支持国际化(gettext),但没有Qt方便,编译的库大小3M左右(Debug版本算上全部的lib)比Qt小;有相似Qt的signal机制,但不须要预编译处理。对opengl和图形图像支持良好。
 
    gtk+基于三个库:glib,pango和atk。glib是底层库,封装了c的数据结构处理,可移植性,thread,动态载入以及一个对象系统。pango是一个布局和文本渲染库,处理
字体和国际化。atk是一个应用程序组件接口库,里面有相似Qt的action之类的。另外cario是一个矢量图的处理库。
 
    由于是C,但代码中避免不了宏和下划线,不是那么讨人喜欢,估计C程序员比较习惯。
 
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
 
    但有其余语言的绑定,c++的是gtkmm,python的是PyGtk,ada的是AdaGtk。其中gtkmm的代码风格比较好,没有了下划线和诸多宏。
   
    gtk+的最著名的成功案例是gimp图像处理工具和gnome桌面。
 GIMP ( http://www.gimp.org/), an image manipulation program
 AbiWord ( http://www.abiword.com/), a professional word processor
 Dia ( http://www.lysator.liu.se/~alla/dia/dia.html), a diagram creation program
 GnuCash ( http://www.gnucash.org/), a personal finance manager
 Gnumeric ( http://www.gnome.org/projects/gnumeric/), the GNOME spreadsheet application
 Glade ( http://glade.gnome.org/), a GTK+ based RAD tool which produces GTK+ and GNOME applications
 Anjuta ( http://anjuta.sourceforge.net/), a versatile Integrated Development Environment (IDE) using C and C++ for GTK+ and GIMP.
 gtk开发框架: http://bakery.sourceforge.net/
 
     2.wxWidget
    wxWidget的设计风格相似MFC,缺少现代风格的组件化设计,对于讨厌一堆宏和下划线的我不是那么爽啊。它象Qt同样,本身实现了一套STL的替代方案,它不象Qt那样本身绘制widget,而是使用各个平台本身的native API,在某些平台,它也使用了gtk+。除非使用wxUniversal,不然不支持皮肤。LGPL协议,可做商业用途,功能齐全,RTTI/Thread/RegExp/Network/OpenGL/HTML/ODBC等都支持的很是好,可是界面设计器wxDesigner不是免费和开源的,使人极度不爽。但若是开发大型跨平台的应用,它是最好的选择。
 
     3.FLTK

    fltk偏向于开发OpenGL图形应用程序,有界面设计器fluid,比较轻量级,因此不支持不少功能,例如Network、Print。代码中使用下划线。界面很像Motif,小而快是它的特色。LGPL协议,但有更多限制(好像分为是否修改源代码仍是继承了widget类)。依赖静态回调函数,没有文件对话框,不支持拖曳和剪贴板。比较起来,彷佛比Fox稳定。和Motif同样使用函数指针实现signal机制。
 
     4.Fox

    fox偏向于纯粹的GUI库,因此也很轻量,不支持国际化、多线程和和打印功能。但它的代码比FLTK看起来爽,不使用signal/slot机制,而是使用本身的消息映射回调机制,能够runtime链接以及序列化。界面很象windows95。LGPL协议,但限制你的应用也必须是LGPL协议,不象话。不支持皮肤,人家都要求了好多年了!
 
    5.Visual Component Framework
    VCF的框架设计很是好,不象Qt和wxWidget,它大量使用STL,比FLTK/Fox具备更加丰富的API,缺省使用Unicode,支持内置的国际化(本地化)和Undo/Redo机制,多线程和RTTI的支持也很好,能够说功能的丰富性直逼wxWidget和Qt,代码风格也是我喜欢的类型(使用namespace和相似java的命名方式)。它的目标是象VB同样使用C++,有Visual C++的插件支持RAD。运用模板和适当的宏实现了反射(RTTI)(不须要象Qt那样生成metaObject),用Observer模式实现了事件系统,库比Qt和MFC都小,大约2M左右。

    惟一让我遗憾的是它还不够成熟。
 
     6.Notus 
    设计风格更加现代的框架,大量使用STL/Boost和模板技术,若是讨厌层次结构和多态的GUI框架,这个适合你。
    遗憾的是该项目不够成熟(Pre-alpha)。
 
    更多的GUI Toolkit:  http://www.atai.org/guitool/
 
     结论:    1. C编程使用GTK+     2. C++大型应用使用gtkmm/wxWidget,我的偏向于前者,虽然在Windows平台gtk+的移植不是支持的很好,但快速开发必须有设计器     3. VCF若是成熟了,将是一个好选择     4. Fox没意思     5. FLTK适合图形图像程序,若是是3D应用和游戏,通常游戏引擎的框架内都实现了内置的GUI框架,例如Nebula的框架,很是吸引人;blender的ghost也很是棒(可是GPL)。
相关文章
相关标签/搜索