在桌面Linux环境下开发图形界面程序的方案对比

2024-05-02 09:10:08

  在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环境下开发图形界面程序的方案对比相关推荐

  1. linux如何运行java程序,Linux环境下运行简单java程序

    一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...

  2. linux命令界面下载kettle,kettle在linux环境中打开图形界面-Go语言中文社区

    kettle在linux环境中打开图形界面 kettle数据转换的时候需要图形界面 当运行./spoon.sh时,如果没有图形界面,会出现下面的结果 ./spoon.sh [root@localhos ...

  3. Matlab GUI学习02:使用GUIDE开发图形界面程序

    pdf版本笔记的下载地址: Matlab GUI学习02_使用GUIDE开发图形界面程序(访问密码:3834) Matlab GUI学习02:使用GUIDE开发图形界面程序 GUIDE GUIDE简介 ...

  4. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  5. Linux环境下多线程C/C++程序的内存问题诊断

    目录 说明 常见的内存错误举例 常见的内存访问错误有以下几种: 内存问题定位步骤 野指针 内存释放后使用(UaF,Use after Free) 内存问题检查工具 常见的内存问题检查工具 Valgri ...

  6. Linux环境下开发板Tiny4412应用,实现交叉编译及minicom的调配,将代码编译后下载到开发板并运行

    一.实验目的 1.熟悉Linux环境,学习使用命令行操控计算机系统,学会基础的ubuntu机器操作. 2.初步学习使用开发板Tiny4412,查看实验说明以及开发板说明书,学习基本使用步骤. 3.安装 ...

  7. Linux环境下开发51单片机

    Linux系统下51单片机开发环境配置 因为现在使用linux的桌面系统进行办公,用虚拟机或者装双系统切换着实不方便. 文章目录 需要的工具 头文件位置 c文件编写 编译 烧录 配置中可能会出现的挫折 ...

  8. VS2008环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(IIS)...

    比较全的有关vs2008部署问题集(1): http://blog.csdn.net/buhuizheyangba/article/details/7220598 比较全的有关vs2008部署问题集( ...

  9. netbeans+j2mepolish 环境下开发黑莓(BlackBerry) 程序

    近日公司要求把之前做的一个 j2mepolish 项目在 BB 上运行.我是一个新手,所以一星期了,还是有小部分bug, 没能成功运行.下边是我对 BB 应用程序开发的一些见解: BlackBerry ...

最新文章

  1. npm未能加载Visual C++组件,解决办法win10
  2. 记一次分布式B站爬虫任务系统的完整设计和实施
  3. excel合并多个工作表_多个工作表或者多个工作簿的合并计算
  4. 您与此网站建立的连接不安全_dede网站密码忘记找回服务为先
  5. gradle官方文档_Spring Boot+Gradle+MyBatisPlus3.x搭建企业级的后台分离框架
  6. 解决pom文件第一行报错(unknown)-亲测有效
  7. java url工具_UrlTool官方版|UrlTool (java Url转换工具)下载v1.1-乐游网软件下载
  8. windows 查看网络中断事件_等保测评2.0:Windows安全审计
  9. 【转载】推荐5款超实用的.NET性能分析工具
  10. PPT优秀模板|7个技巧,让你的设计呈现更加完美
  11. Arcview GIS应用与开发技术(12)-3D分析
  12. 计算机图形学基础(opengl版) pdf,计算机图形学基础(OpenGL版)
  13. [V811双核] 最新昂达V811最新2.0固件ROOT方法
  14. JDK和JRE安装与下载
  15. html缓存的图片放在哪里,浏览器图片缓存在哪
  16. Servlet 三大作用域
  17. 小米手机5s简单刷成开发版获得ROOT权限的方法
  18. 服务器配置与软件安装合集
  19. (附源码)springboot中北创新创业官网 毕业设计 271443
  20. 方舟编译器将开源!华为邀广大开发者助力鸿蒙系统

热门文章

  1. 《keep going》继续坚持【励志英文美文推荐】
  2. Adobe Acrobat Pro DC打开PDF图标异常
  3. 详解BOM头以及去掉BOM头的方法
  4. iOS AirPlay与Apple TV——AirPlay技术
  5. 人类首张黑洞照片公布!爱因斯坦广义相对理论被证实
  6. 华三服务器管理口地址_常用设备管理口默认用户名密码汇总
  7. 企业视频会议表决系统介绍
  8. 保险人员提升专业资质为什么要选择RFP证书?
  9. mysql事务处理银行转账模拟提交以及回滚
  10. metinfo 添加css,米拓7.1如何引入css和js