最强的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.

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

结论:    1. C编程使用GTK+

2. C++大型应用使用gtkmm/wxWidget,个人偏向于前者,虽然在Windows平台gtk+的移植不是支持的很好,但快速开发必须有设计器

3. VCF如果成熟了,将是一个好选择

4. Fox没意思

5. FLTK适合图形图像程序,如果是3D应用和游戏,一般游戏引擎的框架内都实现了内置的GUI框架,例如Nebula的框架,非常吸引人;blender的ghost也非常棒(但是GPL)。

c gui和java gui_C/C++编程GUI库比较相关推荐

  1. 少儿java编程笔试题库_java笔试之编程题库.doc

    java笔试之编程题库.doc 还剩 21页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: // 最后一行处理if (length > 0) {n ...

  2. java事件绑定,Java编程GUI中的事件绑定代码示例

    程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定: 在程序执行前方法已经被绑定,此时由编译 ...

  3. Java桌面编程(GUI)详细

    Java图形界面编程 java中AWT和Swing的区别与联系 Swing和JavaFX如何选择 Swing和JavaFX便捷开发工具 一.AWT和Swing的区别和联系 AWT和Swing的联系 A ...

  4. java学习2-javafx写GUI程序1

    使用eclipse开发javafx,需要安装java8以上版本,下载scene builder 制作FXML文件. 新建package HelloJava.java是main函数所在类.起到调度作用 ...

  5. Java程序员必备 : Java反编译神器——“GUI” 资源分享

    GUI简介 当我们编写完成一个java类后,运行结果会得到一个class文件,这种二进制文件如果用普通记事本打开,就会出现各种乱码现象,令人十分头疼,当我们要查看.class文件的源代码时,可以通过反 ...

  6. Java SE 6之GUI:让界面更加绚丽(下)

    在上一篇中我介绍了Java SE 6在GUI上的部分改进.在这篇文章中我接着介绍另外几种新的GUI功能.这些功能是: 1.  带有排序和过滤功能的JTable. 2.  增强的JTabbedPane组 ...

  7. Java设计登录界面——GUI

    GUI(图形用户界面) 要设计一个简洁的登陆界面,首先需要创建一个窗体,然后在窗体中设置用户名,密码,登录按钮,退出按钮.可以直接在窗体中把需要的元素组件添加进去,也可以创建中间容器,将中间容器再添加 ...

  8. GUI的演化和python编程——Python学习笔记之二十二

    GUI的演化和python编程--Python学习笔记之二十二 写完了有关长寿的两篇博文,本该去完成哥德尔那个命题六的.对计算机图形界面的好奇,让我把注意力暂时离开那个高度抽象难读的哥德尔,给转到计算 ...

  9. Java实现人民币大写+GUI界面

    项目资源下载链接Java实现人民币大写+GUI界面 文章标题 1.提要 2.算法 3. 代码 (1)界面:windowbuilder插件的使用 (2)实现人民币转换的类 Convert.java (3 ...

最新文章

  1. 将h5用HBuilderX打包成安卓app后,document.documentElement.scrollTop的值始终为0或者document.body.scrollTop始终为0...
  2. FPGA 起脚nCEO/IO管教设置问题
  3. 若依管理系统源码分析-导出Excel时怎样通过注解中readConverterExp实现格式化导出列的显示格式(0和1格式化为是否)
  4. 【内核数据结构】 内核链表分析
  5. 服务器向客户端不响应为null的属性(为了便于查询JSON数据)spring.jackson.default-property-inclusion=NON_NULL
  6. 博客转移至 https://www.babac.cn/
  7. css中图片有缩放和转动效果
  8. 软件项目立项书_2019年度上海市软件和集成电路产业发展专项资金项目立项
  9. python collections模块_Python 的collections模块
  10. python培训班靠谱吗-python培训机构靠谱吗?python培训班
  11. 漏洞分析中常用的堆调试支持
  12. 电脑如何快速截屏技巧 四种常见的电脑截图方法
  13. 【华为MateBook13】更换1TB固态硬盘SSD+重装win10系统+安装NVIDIA显卡驱动+电脑管家+指纹驱动+蓝牙驱动+Office激活
  14. wsl2 安装 Centos8
  15. React:开发者工具谷歌插件下载安装
  16. VMware15.1安装苹果系统mac10.15.3(图解)
  17. 2023第八届少儿模特明星盛典 小超模矫沐含 担任全球赛代言人
  18. 微信小程序请求头header_微信小程序开发:http请求
  19. mfc vs2010 C++ 连接mysql等数据库
  20. iphone竖屏视频旋转_如何在iPhone上旋转视频

热门文章

  1. k短路-洛谷P2483 [SDOI2010]魔法猪学院
  2. ServerSocketChannel的使用例子
  3. ArcIMS9.2新增地图服务时check your map file's layers and data source connections解决
  4. android emulator虚拟设备之qemu pipe分析(三)
  5. webrtc之SVC实现(十)
  6. Activity、View、Window的理解一篇文章就够了
  7. 解决Mac终端exit退出不爽
  8. 人人都应该学习并成为优秀的产品经理,因为你要为《你自己》这个产品负责到底
  9. Android内核开发:系统分区与镜像文件的烧写
  10. xcode6.1中 symbolicatecrash位置