桌面程序开发框架选择
桌面程序开发框架选择
- 1、WinForm(Windows Form)
- 优点
- 缺点
- 2、WPF(Windows Presentation Foundation)
- 优点
- 缺点
- 3、Electron
- 优点
- 缺点
- 4、Delphi
- 优点
- 缺点
- 5、QT
- 优点
- 缺点
- 6、MFC(Microsoft Foundation Class Library)
- 优点
- 缺点
- 7、JavaFX
- 优点
- 缺点
- 8、Swing+AWT
- 9、Avalonia
- 10、Flutter
1、WinForm(Windows Form)
https://learn.microsoft.com/zh-cn/dotnet/desktop/winforms/overview/?view=netdesktop-8.0
从.NET Framework 2.0就有了,后来.NET Core没有放弃它,继续在维护。在很古老的系统上运行,特别是工控软件上
优点
- 简单易用,学习曲线平缓;适合快速开发简单的桌面应用
- 不挑系统,资源消耗低,可以在古老的系统上运行
缺点
- 用户界面相对陈旧,不如现代框架灵活
- 提供的UI控件较少,自定义和样式化的能力有限
- 只能在Windows运行
2、WPF(Windows Presentation Foundation)
https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/overview/?view=netdesktop-8.0
从.NET Framework 3.5就有了,后来.NET Core没有放弃它,继续在维护。界面优美,资源消耗高,可以很方便做出精美的主流C端程序
优点
- 强大的UI自定义:WPF使用XAML描述界面,提供丰富的自定义和样式化能力,可以创建现代化和富有创意的用户界面。
- 数据绑定和MVVM支持:WPF内置了强大的数据绑定功能,支持MVVM(Model-View-ViewModel)模式,使应用程序的开发更加灵活和可维护。
- 矢量图形和动画效果:WPF支持矢量图形和动画效果,可以创建高质量的可视化效果。
缺点
- 学习曲线较陡峭:WPF的学习曲线相对较陡峭,需要掌握XAML和一些复杂的概念。
- 较高的资源消耗:由于WPF使用自己的渲染引擎,相比WinForm,WPF应用程序通常具有较高的资源消耗。
- 只能在Windows运行
3、Electron
https://www.electronjs.org/zh/
Electron是一个基于Chromium和Node.js的框架,它通过将这两者合并到同一个运行时环境中,使得开发者可以使用Web技术来构建桌面应用程序,并能在Windows、macOS和Linux等多个平台上运行
优点
- 跨平台支持:Electron可以将应用程序打包为可在不同操作系统上运行的可执行文件,提供了跨平台的能力。
- 使用Web技术:Electron使用HTML、CSS和JavaScript开发应用程序,可以利用丰富的Web技术和生态系统资源。
- 社区活跃:Electron拥有活跃的开发社区,有大量的插件和工具可供使用。
- 丰富的API:提供了丰富的本地(操作系统)API,使得开发者可以使用纯JavaScript来创建桌面应用程序。
- 上手难度低:前端开发者可以快速上手,因为Electron支持HTML、CSS和JavaScript等熟悉的Web技术。
- 热更新:支持应用的在线更新,无需用户重新安装。
- 调试和测试方便:可以使用Chrome开发者工具进行调试,并且支持多种测试框架。
缺点
- 较大的应用程序体积:由于Electron需要打包包含Chromium浏览器引擎的应用程序,因此应用程序的体积较大。
- 较高的资源消耗:由于Electron使用Chromium浏览器引擎,相比传统的桌面应用程序,Electron应用程序通常具有较高的资源消耗。
- 安全性问题:用户可以通过开发者工具和ASAR源文件轻松访问源代码,存在潜在的安全风险。
4、Delphi
https://www.embarcadero.com/products/Delphi
主要用于开发 Windows 桌面应用程序,功能强大,效率高。最新版本逐步开始支持其他平台
优点
- Delphi 的编译速度非常快,这使得开发过程更加高效;生成的可执行文件通常具有很高的运行时性能,因为它是编译成本地代码
- Delphi 提供了一个丰富的可视化组件库(VCL),涵盖了从基本控件到高级控件的各种需求
- Delphi 内置了对多种数据库的支持,包括 SQL Server、Oracle、MySQL 等;提供了丰富的数据访问组件,如 ADO、IBX、dbExpress 等,使得数据库操作更加方便
- Delphi 的 FireMonkey 框架支持跨平台开发,可以在 Windows、macOS、iOS 和 Android 上运行(新版本开始支持其他平台)
- Delphi 的 IDE 功能强大,提供了代码编辑、调试、版本控制等全方位的支持
- Delphi 拥有一个活跃的开发者社区,提供了大量的教程、示例和第三方组件
缺点
- 对于没有 Pascal 或 Delphi 经验的开发者来说,学习曲线可能较陡峭
- 尽管 FireMonkey 支持跨平台开发,但 Delphi 的主要优势和大部分资源仍然集中在 Windows 平台上;其他平台可能存在性能、体验不友好的问题
- 默认的 VCL 组件可能显得有些过时,尤其是在现代应用中追求更现代和美观的用户界面
- 虽然 Delphi 有丰富的第三方库和组件,但相比于一些更流行的现代框架(如 .NET 或 Node.js),生态系统的多样性和活跃度可能略显不足
- Delphi 是一个商业软件,购买许可证的成本可能较高,特别是对于小型开发团队或个人开发者
5、QT
https://www.qt.io/zh-cn/
QT是一个跨平台的C++开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,同时也可以开发不带界面的命令行(Command User Interface,CUI)程序。
优点
- 支持 Windows、macOS、Linux、Android、iOS 等多个操作系统,使得开发一次代码即可在多个平台上运行
- 提供了一致的 API 和用户界面风格,确保应用程序在不同平台上具有一致的行为和外观
- 提供了大量的 GUI 控件,包括按钮、标签、列表框、表格等,满足各种用户界面需求
- 可以轻松创建自定义控件,扩展和修改现有控件的功能
- 提供了丰富的网络编程功能,支持 HTTP、FTP、WebSocket 等协议
- 支持多种数据库(如 SQLite、MySQL、PostgreSQL 等),提供了简便的数据访问接口
- 内置了多线程支持,简化了并发编程
- 支持多语言和多区域设置,便于开发国际化应用
- 使用 QML 语言,提供了一种声明式的编程方式,适合开发现代、动态的用户界面(实际上QML使用起来不是那么很和谐)
- 支持丰富的动画和图形效果,可以创建视觉效果出色的用户界面
- Qt 的编译器优化良好,生成的代码运行效率高
- 提供了智能指针和自动垃圾回收机制,帮助开发者更好地管理内存
- 官方文档和示例代码比较完善,社区活跃
缺点
- 学习曲线可能较陡峭,首先C++就比较难,其次框架也是很复杂
- 编译时间可能较长,特别是在大型项目中
- 生成的可执行文件可能较大,特别是在包含大量模块和库的情况下
- 虽然提供了免费的 LGPL 版本,但商业项目可能需要购买商业许可,费用可能较高
- LGPL许可证要求任何修改后的 Qt 代码必须开源,这可能不适合所有商业项目
- 虽然 QML 适合开发现代用户界面,但在某些高性能场景下,纯 C++ 实现可能更优
- QT依赖于多个外部库和模块,管理这些依赖可能会增加项目的复杂性
6、MFC(Microsoft Foundation Class Library)
MFC(Microsoft Foundation Class Library)是一个用于开发 Windows 应用程序的 C++ 类库。MFC 是微软早期提供的一个框架,广泛用于开发 Windows 桌面应用程序。在实际开发中,常与QT进行比较,虽然现在貌似不怎么更新了,但是在一些特殊场景还是有用武之地;当时上学期间用VC6开发C语言的时候,MFC就存在了,现在还能用,经过了时间的检验,稳定性没得说
优点
- MFC 提供了对 Windows API 的直接访问,使得开发者可以充分利用 Windows 操作系统的功能
- MFC 包含了大量的类,涵盖了从基本的窗口管理到复杂的文档视图架构等多种功能
- MFC 生成的代码通常具有很高的运行时性能,因为它直接编译成本地代码
- MFC 提供了有效的资源管理机制,帮助开发者优化内存和系统资源的使用
- MFC 有悠久的历史,积累了大量的教程、示例和第三方资源
- FC 与宇宙第一IDE(Visual Studio)集成良好,提供了丰富的开发工具和调试功能,用社区版本Visual Studio,不用花钱就可以开发商业版本的程序
缺点
- MFC 的学习曲线较陡峭,尤其是对于没有 C++ 经验的开发者
- MFC 的用户界面组件相对陈旧,缺乏现代 UI 设计所需的丰富动画和图形效果
- 微软对 MFC 的更新和支持不如以前频繁,新功能和改进较少
- 用 MFC 开发的应用程序通常需要编写更多的代码来实现相同的功能,尤其是在处理复杂用户界面时
- MFC 高度依赖于 Windows API,这使得应用程序难以移植到其他平台
7、JavaFX
基于 Java 构建的桌面、移动和嵌入式系统。这是许多个人和公司共同努力的结果,其目标是为开发富客户端应用程序生成一个现代、高效且功能齐全的工具包
优点
- 控件丰富,支持CSS控制样式,FXML写布局,界面与业务分离
- 跨平台,支持Windows、macOS 和 Linux,新版还支持移动设备;在不同平台上提供一致的用户界面和行为,减少了跨平台开发的复杂性
- 提供了丰富的多媒体支持,可以播放音频和视频文件,支持多种格式;同时对于矢量图形、3D 图形的支持也很好
- 支持双向数据绑定,可以轻松地将模型数据与用户界面控件绑定,减少手动同步的工作量
- 提供了丰富的多线程支持,简化了并发编程,确保用户界面的响应性和流畅性
- 官方文档齐全,社区活跃
缺点
- 性能问题,Java通病,启动时间长,内存消耗多
- 对于没有 JavaFX 经验的开发者来说,学习曲线可能较陡峭;如果有Java基础,开发过Swing程序,上手速度很快
- 本同版本的功能有些微差别,需要对应的JDK
- 生态圈还是比较小,不如.Net与Electron
- Oracle 将 JavaFX 从 JDK 中移除后,交由社区维护,可能会存在更新慢等问题
8、Swing+AWT
9、Avalonia
10、Flutter
相关文章:
桌面程序开发框架选择
桌面程序开发框架选择 1、WinForm(Windows Form)优点缺点 2、WPF(Windows Presentation Foundation)优点缺点 3、Electron优点缺点 4、Delphi优点缺点 5、QT优点缺点 6、MFC(Microsoft Foundation Class Library)优点缺点 7、JavaFX优点缺点 8、SwingAWT9、Avalonia10、Flutter…...

Vue项目开发:Vuex使用,表单验证配置,ESLint关闭与常见问题解决方案
文章目录 vuexvue配置form表单验证移除vue中表单验证的两种方法关闭vue项目的eslint代码校验做vue项目出现的问题 vuex Vue提供的状态管理工具,用于统一管理我们项目中各种数据的交互和重用,存储我们需要用到的数据对象属性 state:vuex的基本…...

源鲁杯2024赛题复现Web Misc部分WP
MISC [Round 1] whatmusic 拿到题目,一个password和加密的压缩包 查看password的文件尾 这里会发现是png文件的文件头,逆序输出,并保存为1.png。得到一个图片, 进行CRC爆破,发现宽高被修改,之后拿到压缩…...

【企业微信新版sdk】
wecom 的引入使用 一、引入wecom二、封装函数三、使用测试 一、引入wecom 1、企业微信 WECOM-JSSDK提供了 npm 和 cdn 两种引入途径。1.1、 npm 引入 npm install wecom/jssdk1.2、安装后引入 import * as ww from wecom/jssdk通过 script 标签引入 <script src"ht…...

web安全测试渗透案例知识点总结(下)——小白入狱
目录 [TOC](目录)一、更多详细的实际案例教程案例1:文件上传漏洞利用案例2:目录遍历(Path Traversal)漏洞检测案例3:暴力破解登录密码案例4:命令注入漏洞案例5:身份认证绕过(Passwor…...

【专题】数据库的安全性
1. 数据库安全性概述 数据库存在的不安全因素: 非授权用户对数据库的恶意存取和破坏; 数据库中重要或敏感的数据被泄露; 安全环境的脆弱性。 数据库的安全性与计算机系统的安全性,包括计算机硬件、操作系统、网络系统等的安全…...

【含开题报告+文档+源码】基于Java的房屋租赁服务系统设计与实现
开题报告 随着城市化进程的加速和人口流动性的增加,租房需求不断增长。传统的租赁方式往往存在信息不对称、流程不规范等问题,使得租户和房东的租赁体验不佳。而而房屋租赁系统能够提供便捷、高效的租赁服务,满足租户和房东的需求。房屋租赁…...
数据结构模拟题[十]
数据结构试卷(十) 一、选择题 (24 分) 1.下列程序段的时间复杂度为( )。 i0 ,s0; while (s<n) {ssi ;i ;} (A) O(n 1/2 ) (B) O(n 1/3 ) (C) O(n) (D) O(n 2 ) …...

Java基于微信小程序的美食推荐系统(附源码,文档)
博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

基于CNN-RNN的影像报告生成
项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【PaddleNLP的FAQ问答机器人】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...
MacOS如何读取磁盘原始的扇区内容,恢复误删除的数据
MacOS 也是把磁盘当成一个文件,也是可以使用 dd来读取,命行令行如下: sudo dd if/dev/disk2 bs512 count1 skip100 ofsector_100.bin 这个就是读取 /dev/disk2这个磁盘每100这个sector, bs表示扇区大小是512. 但是你直接用读,应…...

创客匠人:打造IP陷入迷茫?20位大咖直播如何破局,实现财富增长
就在明天! 11月4日-8日,全球创始人IP领袖峰会线上启动会——《2025年知识IP创新增长训练营*20位各界大咖标杆集体赋能》直播活动,即将重磅来袭! 20位行业大咖5大篇章主题内容的强大组合,将为你逐一精彩呈现ÿ…...

视觉目标检测标注xml格式文件解析可视化 - python 实现
视觉目标检测任务,通常用 labelimage标注,对应的标注文件为xml。 该示例来源于开源项目:https://gitcode.com/DataBall/DataBall-detections-100s/overview 读取 xml 标注文件,并进行可视化示例如下: #-*-coding:ut…...

clion远程配置docker ros2
CLION与docker中的ROS2环境构建远程连接 设备前提开启SSH服务CLION配置CLION配置CLION IDE远程连接过程实现CLION SSH 远程部署 开启fastlio2debug之旅 设备前提 本地宿主机:UBUNTU 20.04 docker container:ros2_container (内置环境ROS2 humble) 通过之前的tcp连接…...
微信小程序 uniapp 腾讯地图的调用
/* 提前在您的app.json上加上这些代码 "permission": { "scope.userLocation": { "desc": "你的位置信息将用于地图中定位" } …...

OLAP平台架构演化历程
OLAP平台架构演化历程 0 导读 随着大数据的持续发展及数字化转型的兴起,大数据OLAP分析需求越来越迫切,不论是大型互联网企业,还是中小型传统企业,都在积极探索及实践OLAP引擎选型及平台架构建设,大数据技术的蓬勃发展…...

OmniGen: Unified Image Generation(代码的复现)
文章目录 论文简介模型的部署需要下载的预训练权重 模型的生成效果图像编辑的效果风格迁移的效果 总结 论文简介 OmniGen的github项目地址 OmniGen: Unified Image Generation。OmniGen 在各种图像生成任务中都表现出了卓越的性能,并可能大大超过现有扩散模型的极…...

keepalive+mysql8双主
1.概述 利用keepalived实现Mysql数据库的高可用,KeepalivedMysql双主来实现MYSQL-HA,我们必须保证两台Mysql数据库的数据完全一致,实现方法是两台Mysql互为主从关系,通过keepalived配置VIP,实现当其中的一台Mysql数据库…...
C#-基础构造函数、析构函数
一:基础的构造函数 实例化对象时 调用的函数,主要是用来初始化成员变量的。 在构造函数时,对象的初始化是自动完成的,为默认值,但为满足一些特殊数据的初始化操作。可不使用系统默认给的构造函数 基本语法ÿ…...

Ubuntu删除docker
文章目录 安装依赖1.安装操作系统:2.CPU支持 安装docker1.查看系统版本2.执行卸载 安装依赖 1.安装操作系统: 高于 Ubuntu 20.04(LTS) 版本 2.CPU支持 ARM和X86_64 安装docker 1.查看系统版本 cat /etc/*releas*uname -a2.执行卸载 检查本地dock…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表
设计一个MySQL数据库和Clickhouse数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...