最强的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)。
原网址: 访问
创建于: 2023-12-19 11:33:22
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论