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

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

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

所以站在Qt的视角去比较所有其他的开源库,相信这样能为你作出正确的选择。

    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)。

C/C++编程GUI库比较的更多相关文章

  1. Python 图形 GUI 库 pyqtgraph

    原文  Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...

  2. 8个必备的Python GUI库

    Python GUI 库有很多,下面给大家罗列常用的几种 GUI 库.下面介绍的这些GUI框架,能满足大部分开发人员的需要,你可以根据自己的需求,选择合适的GUI库. 很多人学习python,不知道从 ...

  3. Python:GUI库tkinter(一)

    学习自: Python GUI 编程(Tkinter) | 菜鸟教程 TkDocs_官方文档 1.几个常用的Python GUI库 tkinter:Python的标准Tk GUI工具包的接口. wxP ...

  4. paip.输入法编程---词库多意义条目分割 python实现.

    paip.输入法编程---词库多意义条目分割 python实现. ==========子标题 python mysql 数据库操作 多字符分隔,字符串分割 字符列表循环  作者 老哇的爪子 Attil ...

  5. 8个免费实用的C++GUI库(转载)

      C++标准中并没有包含GUI,这也使得C++开发图形化界面需要依赖于第三方的库.实际上,图形界面恰恰是C++的强项,小到平常使用的各类桌面软件,大到魔兽世界这样的游戏,都是C++擅长的地方.C++ ...

  6. Python GUI库

    PyQT不错的,只是要小心,这个东西是GPL的,如果你要写商业程序需要购买商业版授权.另外PyGTK.wxPython都是不错的GUI库.Python自带了一个基于TkInter的GUI库,如果你不想 ...

  7. 8个免费实用的C++GUI库

    8个免费实用的C++GUI库 C++标准中并没有包含GUI,这也使得C++开发图形化界面需要依赖于第三方的库.实际上,图形界面恰恰是C++的强项,小到平常使用的各类桌面软件,大到魔兽世界这样的游戏,都 ...

  8. 翻译连载 | 附录 C:函数式编程函数库-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  9. GUI库之认识Tkinter(一)

    一.介绍 Tkinter是Python默认的GUI库,我们经常使用的IDLE就是用Tkinter设计出来的,因此我们在使用的时候直接导入Tkinter模块就好了. 1.特点:可移植性.灵活性高 2.构 ...

随机推荐

  1. openresty + lua 3、openresty http 调用

    http 的话,openresty 已经集成,ng 的话,自己引入即可. github 地址:https://github.com/pintsized/lua-resty-http github 里提 ...

  2. hdu 4968 最大最小gpa

    http://acm.hdu.edu.cn/showproblem.php?pid=4968 给定平均分和科目数量,要求保证及格的前提下,求平均绩点的最大值和最小值. dp[i][j]表示i个科目,总 ...

  3. Scala_关键字

    关键字 Lazy Scala中用lazy定义的变量叫惰性变量,会实现延迟加载:惰性变量只能是不可变变量,而且只有在调用惰性变量时,才会去实列化这个变量 object ScalaLazyDemo1{   ...

  4. day06_雷神_面向对象初识

    day_06 递归函数 自己用自己.一般递归100多次,都没有解决的问题,放弃递归. count = 0 def func1(): global count count += 1 print(coun ...

  5. oc门

    OC门电路,即集电极开路输出结构门电路,电路结构图为:

  6. asp.net 子应用程序/虚拟目录 session共享

    最近遇到了一个问题,我做的asp.net mvc应用程序要作为一个子应用程序部署到几个站点中,需要在本应用程序中获取站点的session值. 已经使用了session state server,并设置 ...

  7. python--求参赛两队所有可能的比赛组合情况

    朋友遇到一个面试题,让我帮忙实现,题目如下: 红队有A1,B1,C1三名队员,蓝队有A2,B2,C2三名队员,每轮比赛各队出一名队员参加,一名队员只能参加一次比赛,假设A1不会和B2打,B1不会和B2 ...

  8. C#Winfrom数据库读取日期(年月日格式转换)

    显示类型:2018-6-1 //说明:data_time.Text 控件名文本值 :dataset.Tables[0].Rows[0]["art_time"]  数据集.表名.[行 ...

  9. 回头探索JDBC及PreparedStatement防SQL注入原理

    概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...

  10. <转>php中heredoc与nowdoc的使用方法

    http://www.361way.com/php-heredoc-nowdoc/3008.html 一.heredoc结构及用法 Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 ...