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

从零实现js开发Linux图形界面程序 前言 近期工作上收到开发需求,公司欲大肆出售运行在特殊场景下的服务器硬件(基于Linux操作系统),前端工程师需要配合开发Linux系统下的图形化应用程序一起交付. 最终需要的应用程序通过调用硬件工程师编写的shell脚本直接获取机器当前运算数据和相关参数,然后渲染界面提供给用户查看.整个过程由前端与硬件工程师对接,不需要后端参与. 由于之前拥有使用Electron在windows下开发客户端软件的经验,这一次仍然选择Electron作为技术方案实现开发目标. Electron是一个使用 JavaScrip 阅读详情

在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的Swing/AWT组件也可以用于开发Linux下的GUI应用。

本文将依次介绍GTK+、Qt、wxWidgets和Swing/AWT,对其进行对比分析。

1. GTK+


平台支持

虽然GTK+最初是为X Window系统开发的,但是目前已经发展成为一个跨平台的图形界面API,其支持的平台包括:

  • Linux
  • Unix
  • Windows
  • Mac OS X

许可协议

GTK+基于LGPL协议发布,因此可以将GTK+的二进制动态链接库文件整合到私有软件中而无需额外授权。

语言支持

GTK+本身是用C语言编写的,但是可以很方便地通过语言绑定(language binding)和其它语言协同工作,GTK+不同版本的语言绑定支持情况如下图所示。

gtk-lang

其中带有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),其支持的平台包括:

  • Windows
  • Mac OS X
  • Linux / Embedded Linux / VxWorks
  • Solaris
  • Android
  • iOS
  • BlackBerry

许可协议

Qt支持LGPL 2.1协议和一个商业协议,因此可以将Qt的二进制动态链接库文件整合到私有软件中而无需额外授权。如果需要使用静态链接将所有代码打包为单个的可执行文件,则需要公开源代码。如果既要生成单个可执行文件,又不想公开代码,则需要向Digia购买商业使用授权。

语言支持

Qt是一个基于C++的应用程序框架,但是同GTK+一样,可以通过语言绑定支持更多的语言,包括:

  • Python
  • Java
  • Ruby
  • BASIC
  • Ada
  • Perl
  • C#
  • D
  • Pascal
  • Lua
  • Haskell

需要注意的是,使用其它语言封装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++编写的的,同时还支持以下的语言绑定:

  • Ada
  • BASIC
  • D
  • Delphi
  • Erlang
  • Go
  • Haskell
  • Java
  • Lua
  • Perl
  • PHP
  • Python
  • Ruby

其它特性

在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,包括:

  • Windows
  • Mac OS X
  • Linux
  • Solaris

当然还有大多数的移动、嵌入式平台,这里就不一一列举了。

许可协议

Java的许可协议情况有些复杂,网上有不少相关的讨论,如这里、这里和这里。目前Oracle和Android之间就存在着一些纠纷,但是目前似乎没有桌面Java应用由于授权问题被起诉,作为开发应用的工具,Java目前应该还是比较安全的。

其它特性

AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口,与wxWidgets类似,因此具有相对比较高的运行效率。

而在JDK 1.2之后,出现了一组新的图形API,叫Swing。Swing是基于AWT构建的,并且采用与Qt类似的方式通过绘图模拟各个控件,因此灵活性大大增加。通常我们看到的Java应用程序独特的外观大多都是基于Swing构建的。由于Java本来运行效率就较低,搭配Swing后就更慢了,因此在嵌入式平台AWT始终是构建图形界面的首选方案。桌面应用则通常使用Swing搭建。

总结


summary

由于本项目组的成员并不熟悉Java,故其学习成本相对更高一些。综合各种因素,目前Qt还是在Linux平台下开发图形界面程序当之无愧的首选方案。

WSL2 Ubuntu图形界面安装与远程桌面 WSL是不支持显示图形界面的,目前只支持命令行。WSL内部使用的是VM,可以运行KDE、Gnome、xfce、lxde等桌面环境,但是无法直接显示。据说微软会在后续退出WSL的图形界面,在目前,我们可以通过远程连接的方式来访问子系统的图形界面。 这里会在Ubuntu上以xfce为例,使用xrdp远程共享桌面,在windows上用自带的远程桌面软件访问xfce图形界面。 WSL的安装以及其他问题参照我的这篇博客: https://blog.youkuaiyun.com/qq_43878324/article/deta. 阅读详情

相关推荐

搞懂Linux图形界面相关术语

通过本篇文章的学习,你现在应该对Linux图形界面的主要组件和术语有了清晰的了解。从桌面环境、显示管理器,到窗口管理器、合成器,再到X11和Wayland的差异,最后我们还了解了Linux上常用的GUI开发工具包。 无论是作为用户选择适合的桌面环境,还是作为开发者编写高效的图形应用程序,这些知识点都将帮助你在Linux世界中更加得心应手。

Linux内核研究者 1373

Linux之基础开发工具

Linux中的基础开发工具及其使用,包括yum(软件包管理器)、vim(编辑器)、gcc/g++(编译器)、makefile(项目自动化构建工具)、gdb(调试器)等。

一只小卷毛的博客 3864

Linux 桌面系统编程:利用GTK库创建图形界面应用程序

Linux 桌面系统编程:利用GTK库创建图形界面应用程序在 Linux 桌面环境中,编写图形界面应用程序是一种常见的需求。为了创建这样的应用程序,我们可以使用 GTK (GIMP Toolkit) 库。GTK 是一个开源的工具包,它提供了一套用于创建用户界面的函数和工具。本文将介绍如何使用 GTK 库来编写 Linux 桌面系统的图形界面应用程序,并提供相应的源代码示例。

TechCraze的博客 1194

怎么开发Linux图形界面程序,Linux下的图形界面编程

Linux下的图形界面编程一、Qt和GTK+虽然Linux下的大多数开发是基于字符界面的,但在Linux环境下也可以开发出美观大方的图形界面。经过多年的发展,目前已经存在多种用于在Linux下开发图形界面程序的开发包,其中较为常用的是Qt和GTK+。Qt是一个跨平台的图形用户界面开发库,它不仅支持Linux操作系统,还支持所有类型的UNIX以及Windows操作系统。Qt良好的封装机制使它模块化程...

weixin_42511587的博客 1万+

Java与QT的比较及选择

总结起来,Java适用于企业级应用、Web应用和移动应用的开发,具有跨平台能力和丰富的库和框架。QT适用于桌面应用的开发,具有高性能的图形界面和灵活的设计。根据你的需求和编程经验,选择适合的语言和框架将有助于提高开发效率和应用性能。如果你要开发的是企业级应用、Web应用或移动应用,Java可能是更好的选择。如果你要开发的是桌面应用,QT可能更适合,因为它专注于提供高性能的图形界面。通过上面的例子,我们可以看到Java和QT在语法和使用方式上的差异。在软件开发领域,选择适合的编程语言和框架是非常重要的。

TechRoarX的博客 2121

【Qt实战项目】记事本完整项目

效果图如下所示: 全部代码如下: #include “notepad.h” #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.showMaximized(); return a.exec(); }

YIZHILIUSHA2020的博客 575

关于linux的图形界面

Linux操作系统提供了多种用户界面,主要分为图形用户界面(GUI)和命令行界面(CLI)我们知道linux操作系统是由GNU套件/linux内核组成,linux本身是基于命令行的操作系统,更倾向于搭建服务器,Linux内核是没有GUI图形显示的,X Window的目标就是提供GUI的显示。图形用户界面(GUI)(Graphical User Interface)

u010230019的博客 1万+

向NCBI上传16S rDNA数据的操作详解

专门介绍向NCBI上传16S rDNA数据的方法不太多。因为自己有上传数据的需要,所以决定边摸索边写下操作流程。如果这篇博文交代了上传步骤以及一些描述文件属性的书写,帮到你的话,还请点赞收藏。

yue81560的博客 2万+

Linux图形界面详解以及替换桌面程序方法[持续更新]

说明:本文章主要说明Linux图形界面的启动流程,以及使用自己的图形化应用替换桌面程序的方法,类似与安卓启动会启动Launcher,使用自己程序替换Launcher一样,实现应用独占系统,或者设计自己的桌面程序。

雨客的专栏 1739

达妙电机MIT模式调参实战:如何从‘曲线偏离’到‘完美追踪’正弦波?

本文详细解析了达妙电机MIT模式调参实战,从曲线偏离到完美追踪正弦波的方法论。通过MATLAB实时曲线分析,深入探讨位置环(kp)和速度环(kd)的双重调节技巧,帮助工程师优化参数组合,提升电机控制精度和稳定性。

weixin_29053073的博客 731

FreeRTOS任务调度实战:如何让STM32同时处理温湿度采集、OLED显示和云端通信

本文通过一个基于STM32的物联网终端项目,详细讲解了如何利用FreeRTOS实现多任务调度,同时处理温湿度采集、OLED显示和云端通信。文章深入探讨了任务规划、堆栈分配、信号量与消息队列等核心机制,并重点优化了ESP8266通信任务的非阻塞设计与稳定性,为构建响应迅速、运行可靠的嵌入式系统提供了实战指南。

weixin_29188043的博客 331

linux 桌面环境 gnome、kde、xfce、lxde 对比

  如果不是加入了图形界面,微软的Windows系列操作系统不会成功地占领计算机桌面这块高地。这种人机交换的图形化界面,使得界面更加直观、简易、而且更人性化,同时也大大减少了使用者的认知负担,普通用户无需再牢记让人“劳神”的命令,直接拖拽就能操作。在这一点上,微软确实是将图形化操作界面这条路走得更彻底、更专一,尽管人们一直都在抱怨Windows系统安全性和稳定性上的不足,但是,在应用程序和娱乐性上...

whatday的专栏 5909

Halcon学习之一维测量(3)

带定位器的测量。首先看一下“定位”是什么意思?回答:比如我们测量一个芯片,这时候我们设置一个测量矩形,来沿着测量目标进行测量。但是下一张当芯片的位置发生变化时,测量矩形的位置就不对了,就不是沿着测量目标了。这样就不对了!芯片在转,测量矩形也要跟着一起转才行。这个时候就需要“定位”来起作用了!定位之后得到这个芯片的旋转角度之后,测量矩形可以跟着这个角度转。这就是“定位”+“测量”,这是我们工业视觉常用的一个手法,在Halcon里面也是有例子展现的。

deep_love1314的博客 788

Linux教程——Linux桌面环境(桌面系统)大比拼【附带优缺点】

早期的 Linux 系统都是不带界面的,只能通过命令来管理,比如运行程序、编辑文档、删除文件等。所以,要想熟练使用 Linux,就必须记忆很多命令。后来随着 Windows 的普及,计算机界面变得越来越漂亮,点点鼠标就能完成很多工作,人们已经习惯了图形界面化的操作,很难再忍受一片漆黑的命令行窗口了。这推动了 Linux 社区进行变革,很快推出了 Linux 系统的图形界面环境。

Itmastergo的博客 7851

概念解析 | 雷达动态范围

这里存在一个动态范围的问题:强雷达发射信号和弱目标反射信号存在非常大的功率差异,比如传统的脉冲多普勒雷达动态范围可达90dB以上。随着上述技术的发展,预计未来十年雷达接收机动态范围将达到120dB以上,届时雷达的监视能力将得到极大增强。简单来说,雷达动态范围越大,表示接收机噪声越低,对强信号过载保护能力越强,就越能检测到弱信号目标。此外,部分新概念雷达对动态范围提出新的需求,如被动雷达动态范围需大于100dB。当前,随着阵列雷达和数字雷达技术的发展,对雷达接收机动态范围提出了更高要求。

NLOS的博客 1051

STM32入门教程:智能储物柜控制

在这个例子中,我们将使用一个4x4的储物柜,共有16个储物格。我们了解了硬件准备、储物柜电路设计、STM32的基本配置、储物柜控制代码的编写以及测试和调试等方面的知识。根据我们的电路设计,我们需要将一些引脚配置为输出,并将其他引脚配置为输入。在本教程中,我们将使用STM32微控制器来实现一个基本的智能储物柜控制系统。在主函数中,我们将不断循环读取传感器数据,并根据数据的变化来控制储物柜的开关和显示相关信息。这个函数将读取人体感应传感器、温湿度传感器和光照传感器的数据,并将数据存储到相应的变量中。

m0_75244442的博客 658

Linux桌面环境(桌面系统)

早期的 Linux 系统都是不带界面的,只能通过命令来管理,比如运行程序、编辑文档、删除文件等。所以,要想熟练使用 Linux,就必须记忆很多命令。后来随着 Windows 的普及,计算机界面变得越来越漂亮,点点鼠标就能完成很多工作,人们已经习惯了图形界面化的操作,很难再忍受一片漆黑的命令行窗口了。这推动了 Linux 社区进行变革,很快推出了 Linux 系统的图形界面环境。完成工作的方式不止一种,Linux 一直以来都以此而闻名,在图形桌面上更是如此,Linux 有各种各样的图形化桌面可供选择。

shiwei0813的博客 1657

【1】Java 部分笔试题解析

解析A.abstract关键字应该放在class关键字之前。C.抽象方法不能有方法体。D缺少了class关键字。

博客 3941

在linux下对桌面图形界面进行管理

前言 关于linux相关的知识其实比较好的学习网站,更多的就是linux官网。 1. arch的wiki网站: https://wiki.archlinux.org/index.php/Xinit_(简体中文) 2. ubuntu的wiki网站: https://wiki.ubuntu.com/CustomXSession?_ga=2.35195881.998869739.1618487423-1134072113.1617848790 3. 介绍xorg很好的一篇文章:https://wiki.arc

walleva96的博客 1160

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

linux图形界面

linux图形界面 安装X图形界面系统 yum list 列出所有可安装的软件包 可以通过 yum grouplist 来查看可能批量安装哪些列表 先装X windows #yum groupinstall ‘X Window System’ -y 安装GNOME桌面环境 yum groupinstall “GNOME Desktop Environment” 安装KDE桌面环境 yum grou...

jeromezmzx007的博客 2359

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: C++之编码问题(Unicode,ASCII,本地默认)
下一篇: Tesseract:安装与命令行使用
卫水金波
博客等级 码龄12年 73粉丝 35原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值