国产开源跨平台软件开发框架新选择:SOUI5
一、SOUI5跨平台解决方案的实现框架介绍

二、SwinX介绍
SwinX是作者经过近一年时间开发的一套运行在linux平台下的Windows APIs,源代码:Github or Gitee S代表Simple也代表启程软件出品,win代表Windows,X代表跨平台。一个带GUI的客户端项目,首先需要操作系统提供常规的进程启动,线程调度等支持,这是OS的常规功能;更重要的是,它还需要系统提供以窗口为基础的UI支持。SwinX提供Windows平台下的窗口管理API(HWND系列API), 图形绘制API(GDI系列API),内核对象API(EVENT,MUTEX,Symaphore等),所有API都经过了大量的单元测试,确保产品稳定运行。
和SwinX类似的产品有Wine,Wine的设计目标是在linux平台二进制兼容Windows平台上现有程序。这一设计目标使Wine非常庞大。然而,实际应用中,Wine能完美运行的大型项目非常少(例如QQ,微信等产品都不可能通过Wine来实现在Linux平台运行)。
SwinX参考了Wine的设计,但SwinX的设计目标是源代码级兼容Windows平台的产品,软件厂家有一个现有的运行在Windows平台的软件产品,通过链接SwinX,再配合适当的跨平台调整代码就可以编译出原生运行在Linux平台的软件(后续MacOS平台的支持也在计划中)。和Wine不同在于,Wine基于X11 API,X11 API是Linux平台早期推出的一套同步API。现在Linux平台提供了性能更高的XCB API,XCB采用异步框架,相对于X11性能有显著提升。
不同于Wine的宏大,SwinX只实现必须的APIs,因此SwinX非常精简,稍有经验的程序员都可以简单地驾驭SwinX,在开发过程中如何发现缺少哪个API的实现,用户可以方便的自己增加这些API。
三、现有支持跨平台的竞品分析
除Wine外,目前能够实现客户端跨平台的框架主要包含Qt, GTK, Electron这三种。
- Qt:Qt 是一个历史悠久、功能强大的跨平台开发框架,支持多种编程语言,如 C++、QML 等。它在桌面和嵌入式应用开发中广泛使用,具有丰富的控件库和强大的图形渲染能力。然而,Qt 的学习曲线较陡,且其开源版本在商业使用中可能需要遵循较为严格的开源协议,商业授权的费用非常高。
- GTK:GTK 是一个开源的跨平台图形用户界面库,主要用于开发 GNOME 桌面环境下的应用程序。它支持多种编程语言,并且在 Linux 平台上表现优异。不过,GTK 在 Windows 和 macOS 上的兼容性相对较弱,且其界面风格与现代应用的审美存在一定差距,此外GTK提供的C语言API,大型项目中使用成本很高。
- Electron:Electron 是一个基于 Web 技术(HTML、CSS、JavaScript)构建跨平台桌面应用的框架。它允许开发者利用 Web 开发经验快速构建应用,并且可以轻松集成各种 npm 模块。然而,Electron 应用通常体积较大,性能消耗较高,且在原生系统功能的集成上存在一定的局限性。
四、SOUI5的优势
SOUI是一套在windows平台上持续维护了10+年的客户端开发框架,5.0之前,通过在windows平台上持续开发维护,形成了自己独特的开发模式,已经在包括:百度,YY,金山,金碟,迅游,富途,韩信等公司的产品中大量使用。
- 完整的控件系统:SOUI5 提供了丰富多样的控件,涵盖了从基础按钮、文本框到复杂的虚表控件等,满足不同应用场景的需求。
- 完整的布局系统:支持多种布局方式,包括线性布局、相对布局、网格布局等,开发者可以根据界面需求灵活选择,轻松实现复杂界面的布局。
- 完整的事件系统:SOUI5 的事件机制结合了 WTL 的消息映射表和 Qt 的 sigslot 两种方式。WTL 的消息映射机制将所有事件响应集中在一起,便于代码维护;而 sigslot 的灵活性则允许开发者在代码的任意位置实现事件响应。
- 完整的矩阵变换系统及动画系统:具备强大的图形处理能力,支持矩阵变换,能够实现复杂的图形变换效果。同时,其动画系统提供了丰富的动画效果,如平移、缩放、旋转等,帮助开发者打造流畅、生动的用户界面。
- 完善的扩展机制:SOUI5 提供了灵活的扩展机制,开发者可以扩展系统提供的控件(IWindow),绘图对象(ISkinObj),布局对象(ILayout)等定制UI,还可以通过插件等方式轻松扩展框架的功能。这种机制使得框架能够根据项目需求进行定制化开发,满足不同业务场景的特殊需求。
- 国产化自主知识产权:SOUI5 是一款国产的跨平台开发框架,拥有自主知识产权。这不仅意味着在技术上不受制于国外框架,还能够更好地支持国内的开发需求,为国产软件的发展提供有力支撑。
- 体积更小,性能更高:相较于一些竞品框架,SOUI5 在设计上更加精简。它通过优化代码结构和资源管理,实现了更小的体积和更高的性能。这使得基于 SOUI5 开发的应用程序在运行效率和资源占用方面更具优势。
- 通过soui4js项目,soui已经在windows平台实现了全部使用js开发原生客户端项目的能力,使用js开发客户端项目可以大大缩短软件产品的开发周期,后续soui4js也将支持SwinX。
- 方便现有 Windows 客户端产品移植:SOUI5 通过自主实现的 Swinx 在 Linux 平台下模拟 Windows API,为 Windows 客户端产品的移植提供了极大的便利。开发者无需对现有代码进行大规模修改,即可快速将应用迁移到 Linux 平台(后续也将对macos提供支持)。
国产开源跨平台软件开发框架新选择:SOUI5的更多相关文章
- 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择 ZT
最近,每个人似乎都在谈论“低代码”.以美国的Outsystems.Kinvey,以及国内的活字格为代表的低代码开发平台,正在风靡整个IT世界.毕竟,能够以最少的编码快速开发应用的想法本身就很吸引人.但 ...
- 2015年热门的国产开源软件TOP 50
2015年热门的国产开源软件TOP 50 开源中国在 2015 年得到了快速的发展,单开源软件收藏量就接近 40000 款,其中不乏优质的国产开源项目.本文从软件的收藏.下载.访问等多角度挑选出了 2 ...
- Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架
Enterprise Solution 是一套管理软件开发框架,在这个框架基础上开发出一套企业资源计划系统Enterprise Edition. 现将Enterprise Solution开发过程中遇 ...
- 2016国产开源软件TOP100(Q1)
随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向成熟,逐步发展成为一种主流模式,日益改变着 ...
- 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore
大家好 , 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 , 名字叫 HtmlCore . 项目的一个主要目标是可以用 .Net 在 移动设备 上 开发 GUI 程序 (界面程 ...
- GitHub 上最热的10款国产开源软件
衡量一个开源产品好不好,看看产品在 GitHub 的 Star 数量就知道了.由此可见,GitHub 已经沦落为开源产品的“大众点评”了.一个开源产品希望快速的被开发者知道.快速的获取反馈,放到 Gi ...
- 2016国产开源软件Top100(Q1)
2016国产开源软件Top100(Q1) 随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向 ...
- 开源server软件
Java缓存server jmemcached http://www.oschina.net/p/jmemcached jmemcached 是一个Java版的 memcached 缓存server, ...
- 开源GIS软件初探
谈到GIS软件,首先让我们想到的便是GIS界的龙头大哥ESRI公司旗下的ArcGIS产品,从最初接触的version 9.2到如今的version 10.1,其发展可谓风生水起.MapInfo软件也不 ...
- .NET Core:面向未来的开源跨平台开发技术
作为一种全新的开源和跨平台的开发平台,.NET Core 历经两年多的开发,终于在于2016年6月27日针对所有主流服务器和桌面操作系统发布 1.0 RTM 版本..NET Core 是一种通用开发平 ...
随机推荐
- Docker私有仓库操作----命令行
查看所有镜像 http://10.206.29.162:5000/v2/_catalog {"repositories":["dashboard"," ...
- Think in Java之构造器的真正调用顺序
构造器是OOP的重要组成部分,很多人认为它很容易.只不过是new了一个对象而已.而think in java的作者却告诉我们,其实这并不容易.先看下面这个例子.在你没看结果之前,你觉得你的答案是对的么 ...
- vue之slot和slot-scope
插槽分两类,默认插槽和具名插槽:通俗理解就是默认插槽是没有名称的插槽,具名插槽是有名称的插槽. 何时使用插槽?简单的举个栗子:有2个组件,父组件father,子组件son. 父组件 father &l ...
- Graylog之进阶操作
有关系统的索引,权限,pipline 参考文章: https://mp.weixin.qq.com/s/LROHPjZEJPMsS5M_a3pPFw https://blog.csdn.net/wei ...
- bitmap的特性和应用
BitMap 是什么? BitMap 简称位图,实际上是一个散列表,只不过这个散列表中各个槽是计算机存储中的最小单元bit. 那BitMap数据结构长什么样呢? 一个长度为8的BitMap是下面这样的 ...
- 预热篇2:从RNN到Transformmer
下面是整理的一个思维导图 2010年Mikolov提出了RNN网络,RNN网络存在长距离依赖(梯度消失),计算效率(RNN 难以并行)两个问题 2017年Transformmer网络结构问世,Tran ...
- FineReport取消强制分页和调整宽度的设置方法
在decision里,找到管理系统-目录管理,打开相应挂载的报表,在参数设置里,添加以下内容: _bypagesize_ 字符串 false
- # 为什么要使用 MediatR 的 3 个理由和 1 个不使用它的原因
为什么要使用 MediatR 的 3 个理由和 1 个不使用它的原因 https://codeopinion.com/why-use-mediatr-3-reasons-why-and-1-reaso ...
- 解决docker 容器设置中文语言包出现的问题_docker
https://www.anquanclub.cn/5821.html 这篇文章主要介绍了解决docker 容器设置中文语言包出现的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 ...
- LiquibaseException java.lang.ClassCastException: class java.time.LocalDateTime cannot be cast to class java.lang.String
https://forum.liquibase.org/t/liquibaseexception-java-lang-classcastexception-class-java-time-locald ...