在桌面Linux环境下开发图形界面程序的方案对比
在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的Swing/AWT组件也可以用于开发Linux下的GUI应用。
本文将依次介绍GTK+、Qt、wxWidgets和Swing/AWT,对其进行对比分析。
1. GTK+
平台支持
虽然GTK+最初是为X Window系统开发的,但是目前已经发展成为一个跨平台的图形界面API,其支持的平台包括:
LinuxUnixWindowsMac OS X
许可协议
GTK+基于LGPL协议发布,因此可以将GTK+的二进制动态链接库文件整合到私有软件中而无需额外授权。
语言支持
GTK+本身是用C语言编写的,但是可以很方便地通过语言绑定(language binding)和其它语言协同工作,GTK+不同版本的语言绑定支持情况如下图所示。
其中带有Gnome标记的上面7个语言是GTK+官方支持的,减号标记则表示只支持部分功能。
其它特性
与wxWidgets和Qt不同,GTK+支持使用纯C语言进行开发,此外还有一个基于C++的封装项目叫GTKMM。
GTK+是基于GLib构建的,其中GLib是一个通用的C语言库,类似于C++中的STL,提供了对动态数组、链表、队列、散列表、平衡二叉树、线程操作和XML解析等功能。
在所有的平台上,基于GTK+的应用都看起来完全一样,除非应用了主题。GTK+总是通过主题来模拟原生控件。在Windows平台下,可以通过使用Wimp主题来获得Windows的原生外观。
2. Qt
平台支持
Qt是目前使用最广泛的跨平台应用程序框架(Application Framework),其支持的平台包括:
WindowsMac OS XLinux / Embedded Linux / VxWorksSolarisAndroidiOSBlackBerry
许可协议
Qt支持LGPL 2.1协议和一个商业协议,因此可以将Qt的二进制动态链接库文件整合到私有软件中而无需额外授权。如果需要使用静态链接将所有代码打包为单个的可执行文件,则需要公开源代码。如果既要生成单个可执行文件,又不想公开代码,则需要向Digia购买商业使用授权。
语言支持
Qt是一个基于C++的应用程序框架,但是同GTK+一样,可以通过语言绑定支持更多的语言,包括:
PythonJavaRubyBASICAdaPerlC#DPascalLuaHaskell
需要注意的是,使用其它语言封装Qt的原生接口会带来一定程度上的性能损失。
其它特性
除了与图形界面相关的部分之外,Qt还包括许多其它的类,比如:
容器(数组、队列、链表、集合、映射等)网络操作(基本Socket、DNS操作、HTTP操作、SSL等)多媒体操作(音乐、视频回放、摄像头控制等)SQL数据库操作OpenGL绘图XML操作串口操作基于Webkit的浏览器引擎
值得一提的是,Qt SQL模块提供了对嵌入式数据库SQLite的支持,无需引入外部的数据库源码。内容丰富的各种类库极大地方便了开发,整个Qt开发工具包就组成了一个独立的一站式开发平台。
和GTK+一样,Qt并不使用系统提供的控件,而是通过主题模拟这些控件。但是在一些特定的平台,比如Mac OS X和Windows上对于一些最基本的控件通过本地系统调用实现。
Qt通过MOC系统对C++语言进行了扩展,提供了所谓的“信号-槽”(signal-slot)机制。基于信号-槽的事件处理非常优雅,缺点则是是编译系统失去了通用性。
Qt的原生IDE是Qt Creater,同时兼容Qt的其它IDE也非常多,包括Visual Studio、Eclipse、XCode、Edyuk。
3. wxWidgets
平台支持
wxWidgets是另一个非常流行的跨平台图形界面库。而GTK+ / Qt不同,wxWidgets并不是通过绘图来模拟控件,而是通过系统本地调用构建完全原生的图形界面。
wxWidgets支持的平台包括:
wxGTK: 使用Linux下的GTK+构建图形界面wxMSW: 使用Win32 API构建图形界面wxMac: 使用Mac OS下的Carbon构建图形界面wxOSX/Carbon: 使用Mac OS下的Carbon构建图形界面wxOSX/Cocoa: 使用Mac OS下的Cocoa构建图形界面wxX11: 使用Linux下的X11的通用显示接口构建图形界面wxMotif: 使用Linux下的OpenMotif和Lesstif构建图形界面
注意到这里的描述方式有所不同,因为wxWidgets是基于本地接口构建UI的。
许可协议
wxWidgets使用wxWindows License作为许可协议,这个协议是基于LGPL的,但是有一点不一样:允许用户在使用静态链接的情况下不公开应用代码,因此实际上比LGPL协议更宽松。
语言支持
wxWidgets是基于C++编写的的,同时还支持以下的语言绑定:
AdaBASICDDelphiErlangGoHaskellJavaLuaPerlPHPPythonRuby
其它特性
在API和编程风格上,wxWidgets和MFC非常相似,但是封装的很多类比MFC更高级。很多知名的MFC程序都会选择用wxWidgets来改写,来快速移植到其它平台,如eMule用wxWidgets移植出aMule和xMule。
除了基本的图形界面、布局、事件系统外,wxWidgets还提供了很多其它的模块,包括:
wxHTML: 进行HTML渲染wxMedia: 对各种多媒体操作提供支持wxNet: Socket支持wxXML: XML文件读写支持
wxWidgets集成的功能相对于Qt而言较少,但是足够完成绝大多数的常见任务。
4. Java / Swing / AWT
平台支持
Swing和AWT是Java中最常用的两种图形组件。理论上所有支持Java虚拟机的平台都可以使用Swing和AWT,包括:
WindowsMac OS XLinuxSolaris
当然还有大多数的移动、嵌入式平台,这里就不一一列举了。
许可协议
Java的许可协议情况有些复杂,网上有不少相关的讨论,如这里、这里和这里。目前Oracle和Android之间就存在着一些纠纷,但是目前似乎没有桌面Java应用由于授权问题被起诉,作为开发应用的工具,Java目前应该还是比较安全的。
其它特性
AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口,与wxWidgets类似,因此具有相对比较高的运行效率。
而在JDK 1.2之后,出现了一组新的图形API,叫Swing。Swing是基于AWT构建的,并且采用与Qt类似的方式通过绘图模拟各个控件,因此灵活性大大增加。通常我们看到的Java应用程序独特的外观大多都是基于Swing构建的。由于Java本来运行效率就较低,搭配Swing后就更慢了,因此在嵌入式平台AWT始终是构建图形界面的首选方案。桌面应用则通常使用Swing搭建。
总结
由于本项目组的成员并不熟悉Java,故其学习成本相对更高一些。综合各种因素,目前Qt还是在Linux平台下开发图形界面程序当之无愧的首选方案。
在桌面Linux环境下开发图形界面程序的方案对比相关推荐
- linux如何运行java程序,Linux环境下运行简单java程序
一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...
- linux命令界面下载kettle,kettle在linux环境中打开图形界面-Go语言中文社区
kettle在linux环境中打开图形界面 kettle数据转换的时候需要图形界面 当运行./spoon.sh时,如果没有图形界面,会出现下面的结果 ./spoon.sh [root@localhos ...
- Matlab GUI学习02:使用GUIDE开发图形界面程序
pdf版本笔记的下载地址: Matlab GUI学习02_使用GUIDE开发图形界面程序(访问密码:3834) Matlab GUI学习02:使用GUIDE开发图形界面程序 GUIDE GUIDE简介 ...
- qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...
本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...
- Linux环境下多线程C/C++程序的内存问题诊断
目录 说明 常见的内存错误举例 常见的内存访问错误有以下几种: 内存问题定位步骤 野指针 内存释放后使用(UaF,Use after Free) 内存问题检查工具 常见的内存问题检查工具 Valgri ...
- Linux环境下开发板Tiny4412应用,实现交叉编译及minicom的调配,将代码编译后下载到开发板并运行
一.实验目的 1.熟悉Linux环境,学习使用命令行操控计算机系统,学会基础的ubuntu机器操作. 2.初步学习使用开发板Tiny4412,查看实验说明以及开发板说明书,学习基本使用步骤. 3.安装 ...
- Linux环境下开发51单片机
Linux系统下51单片机开发环境配置 因为现在使用linux的桌面系统进行办公,用虚拟机或者装双系统切换着实不方便. 文章目录 需要的工具 头文件位置 c文件编写 编译 烧录 配置中可能会出现的挫折 ...
- VS2008环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(IIS)...
比较全的有关vs2008部署问题集(1): http://blog.csdn.net/buhuizheyangba/article/details/7220598 比较全的有关vs2008部署问题集( ...
- netbeans+j2mepolish 环境下开发黑莓(BlackBerry) 程序
近日公司要求把之前做的一个 j2mepolish 项目在 BB 上运行.我是一个新手,所以一星期了,还是有小部分bug, 没能成功运行.下边是我对 BB 应用程序开发的一些见解: BlackBerry ...
最新文章
- npm未能加载Visual C++组件,解决办法win10
- 记一次分布式B站爬虫任务系统的完整设计和实施
- excel合并多个工作表_多个工作表或者多个工作簿的合并计算
- 您与此网站建立的连接不安全_dede网站密码忘记找回服务为先
- gradle官方文档_Spring Boot+Gradle+MyBatisPlus3.x搭建企业级的后台分离框架
- 解决pom文件第一行报错(unknown)-亲测有效
- java url工具_UrlTool官方版|UrlTool (java Url转换工具)下载v1.1-乐游网软件下载
- windows 查看网络中断事件_等保测评2.0:Windows安全审计
- 【转载】推荐5款超实用的.NET性能分析工具
- PPT优秀模板|7个技巧,让你的设计呈现更加完美
- Arcview GIS应用与开发技术(12)-3D分析
- 计算机图形学基础(opengl版) pdf,计算机图形学基础(OpenGL版)
- [V811双核] 最新昂达V811最新2.0固件ROOT方法
- JDK和JRE安装与下载
- html缓存的图片放在哪里,浏览器图片缓存在哪
- Servlet 三大作用域
- 小米手机5s简单刷成开发版获得ROOT权限的方法
- 服务器配置与软件安装合集
- (附源码)springboot中北创新创业官网 毕业设计 271443
- 方舟编译器将开源!华为邀广大开发者助力鸿蒙系统