转自: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. Legal or Not HDU

    Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  2. spring 框架整合mybatis的源码分析

    问题:spring 在整合mybatis的时候,我们是看不见sqlSessionFactory,和sqlsession(sqlsessionTemplate 就是sqlsession的具体实现)的,这 ...

  3. phpize增加php模块

    phpize增加php模块 张映 发表于 2010-02-09 分类目录: php 一,phpize的好处 什么时候我们要用phpize呢?我们在安装php时: './configure' '--pr ...

  4. HMAILSERVER集成WEB邮件系统(ROUNDCUBE WEBMAIL)

    hMailServer集成web邮件系统(Roundcube Webmail) 文/玄魂 前言 在上篇文章(使用hMailServer搭建邮件服务器)中,介绍了hMailServer的安装和简单配置. ...

  5. 跨 iframe 传输数据

    背景:项目用 easyUI 写前端,窗口使用 easyui-window 内嵌套 iframe 展示页面.遇到需要在窗口间传输数据的需求. 解决方案 获取 iframe 对象,然后通过获取的 ifra ...

  6. 背水一战 Windows 10 (58) - 控件(集合类): ListViewBase - ListView, GridView

    [源码下载] 背水一战 Windows 10 (58) - 控件(集合类): ListViewBase - ListView, GridView 作者:webabcd 介绍背水一战 Windows 1 ...

  7. PS插件CameraRaw-初次尝试

    一.百度百科原话 RAW的原意就是“未经加工”.可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据.RAW文件是一种记录了数码相机传感器的原始信息,同时记 ...

  8. ubuntu14.04 下出现 libmysqlclient.so.20 找不到问题

    解决办法: apt-get install libzdb-dev

  9. [Ynoi2018]未来日记(分块)

    分块神题. 看了一会儿题解,看懂了思路,然后写了两个小时,调了一个多小时,好多地方写错了. 我们考虑对序列和值域都分块.\(sum1[i][j]\) 表示前 \(i\) 个块,第 \(j\) 块值域有 ...

  10. nyoj 1274信道安全 第九届河南省赛(SPFA)

    信道安全 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 Alpha 机构有自己的一套网络系统进行信息传送.情报员 A 位于节点 1,他准备将一份情报 发送给位于节点 ...