C++ 和 C# 哪个容易开发出用户体验好(占用资源小&好看&稳定&反应快)的跨 macOS/Windows 平台的桌面程序?

2022-03-20 00:15:46 +08:00
 rv54ntjwfm3ug8

Electron 不考虑,没见过用 Electron 写的用户体验好的程序,公认优化好的 VS Code 启动也很慢,剩余内存一不够就卡得要死。

目前是有一点 C++ Qt 和 C# WinForm 开发经验。想写一个桌面程序,因为比较喜欢 C#(很多功能都不用自己实现,而且我更熟悉一点),而且听说 C# 的 Avalonia 框架可以用来非常方便地开发好看的跨平台 GUI 程序,于是打算用 C#来写。但 Google 了一下,很多人说 Avalonia 在 macOS 上有很多 non-native 行为,例如复制键变成了 Control-C 而不是 macOS 默认的 Command-C ,而且不是很稳定,经常崩溃,也没有什么知名开源项目在用,资料不好找。想问问 C++ 和 C# 哪个容易开发出用户体验好(好看&稳定&反应快&占用资源小)的跨 macOS/Windows 平台的桌面程序?或是还有什么更好的方案?

好看很重要,最好能方便地实现一些过渡动画。

11723 次点击
所在节点    程序员
131 条回复
ikas
2022-03-20 00:32:29 +08:00
并没有.真想要体验.就是各自原生,,业务核心采用 c++,然后可以跨平台编译

ui 部分就是各自原生
WebKit
2022-03-20 00:32:54 +08:00
为什么不考虑 flutter 呢。兼顾开发速度和用户体验
wzzzx
2022-03-20 00:33:24 +08:00
Qt 吧,上 QML 开发速度很快
rv54ntjwfm3ug8
2022-03-20 00:35:23 +08:00
@WebKit #2 几个月前试过,Flutter 桌面版有的时候比 Electron 还慢
duke807
2022-03-20 00:36:15 +08:00
雙擊程序自動彈出系統瀏覽器呈現網頁界面,這樣既享受到 h5 的便利和快捷,又避免了 electron 的臃腫。
後台程序可以是 python 、go 等等不限。
ysc3839
2022-03-20 00:38:57 +08:00
C++ 搭配 React Native?
ysc3839
2022-03-20 00:42:03 +08:00
@duke807 说 Electron 臃肿不仅仅是说占用存储空间大吧?内存占用也大、性能也不好,这些是用浏览器也无法解决的。
u823tg
2022-03-20 00:42:21 +08:00
maui
kilasuelika
2022-03-20 00:42:26 +08:00
@duke807 Electron 那些不就是嵌入了浏览器,比较慢嘛。我自己感觉网页应用的响应速度肯定比不上原生。
darklights
2022-03-20 00:44:20 +08:00
占用资源小&好看&稳定&反应快 -> 显然 C++,没有之一。当然开发效率就是另一回事了。

条件反射般推荐 Flutter 写桌面程序的,我赌 5 毛,连搭个环境写 Hello world 都没试过。
duke807
2022-03-20 00:49:07 +08:00
@ysc3839 我沒用過 electron ,聽說每個 electron 程序都打包了一個瀏覽器,你安裝幾個 electron 程序就等於重複安裝了多個瀏覽器,因為是不同的瀏覽器程序,所以內存也不是共享的,這才是 electron 佔存儲空間和內存的根本原因。

而只調用系統瀏覽器,相當於瀏覽器增加了一個 table ,可以只增加很少內存佔用。

(關於 qt ,我曾經在嵌入式系統,使用 qtwebkit 還是 qtwebengine 記不清了,寫了一個極簡瀏覽器,它只負責打開一個本地 URL 呈現界面。好處是系統上電後全屏運行我的 h5 程序,不需要運行桌面環境。)
duke807
2022-03-20 01:00:02 +08:00
@ysc3839 內存問題我 11 樓有提到,
性能方面大多數場合也夠用。
專業領域,還是 C/C++ 比較快,譬如開源跨平台的畫 pcb 的 kicad ,用的是 wxWidgets 圖形庫,口碑比 qt 好不少。
3dwelcome
2022-03-20 01:15:17 +08:00
macOS 能用 C++直接写界面?

感觉不能吧。不都是用 obj-c 或者是 Swift 开发的。

微软已经放弃 C++的界面库了,全面推用 C#的 WinForm 。C++写算法可以,写界面估计不先包装个几层,还是很难写好的。

话说我在用 Electron 写桌面程序,开发体验感觉是真的好,也可能我本身就是前端缘故,如鱼得水,2333 。
duke807
2022-03-20 01:22:12 +08:00
@3dwelcome
用完全開源的 wxWidgets 可以使用 c++ 寫出跨平台且原生界面的 gui 程序,可以看一下 kicad 6.x 的各平台截圖,或者下載感受一下界面。當然也可以使用 C# 和 python 寫 wxWidgets 程序。
而且 wxWidgets 的版權也比 qt 好很多,qt 越来越不行了。
rv54ntjwfm3ug8
2022-03-20 01:23:23 +08:00
@duke807 #14 wxWidgets 有什么 UI 好看的开源软件例子吗?加过渡动画方便吗?
duke807
2022-03-20 01:24:00 +08:00
qt 的 qml 本質上和 html 差不多,用 qml 還不如用 html
duke807
2022-03-20 01:27:00 +08:00
@theklf4 我有提到 kicad ,涉及 2d GPU 加速,涉及 pcb 3d 展示和渲染,至於動畫,你可以看 wxWidgets 的動畫示範,應該比較友好。

kicad 是開源免費的軟件,你可以下載體驗一下。
XCFOX
2022-03-20 01:29:23 +08:00
来点新鲜的玩具:

Compose Multiplatform:
https://www.jetbrains.com/zh-cn/lp/compose-mpp/

React Native:
https://microsoft.github.io/react-native-windows/
https://github.com/nodegui/react-nodegui
https://github.com/infinitered/reactotron

Rust:
https://tauri.studio/
https://slint-ui.com/

如果是真的生产级应用还是用点稳定的技术。
写过 C# 再去写 C++ 简直是折磨吧。
目前 C# 比较稳定的桌面框架也就:
https://platform.uno/
https://avaloniaui.net/
坑多不多我自己也没用过也不清楚。不过话说哪个框架没坑呢?办法总部困难多。
3dwelcome
2022-03-20 01:31:35 +08:00
最近看了一个 C++工程( https://github.com/filecxx/FileCentipede ),就是用自定义 sml 配置语言作为界面 UI 库,类似 flutter 那种嵌套式 UI 声明语法。

我个人觉得嘛,就算 C++工程,也还是应该把界面部分独立出去。尽可能把界面逻辑和程序逻辑分离,要不然代码会很乱,非常不好移植。

QT 和 wxWidgets 的语法,都是语言强关联的,这样并太好。你对比一下前端的模板式界面编程,都是必须先编译的,把界面模板编译后得到双向绑定的界面代码,控制起来要灵活很多。
3dwelcome
2022-03-20 01:37:19 +08:00
打错字了,应该是"QT 和 wxWidgets 的语法,都是语言强关联的,这样并不太好。"

C++里 UI 写复杂后,代码也是一大堆。要不就抽象出去,要不就用直接用配置脚本来驱动。但是这样的话,也相当于搭建了一个简易的 DSL(domain specific language)。

所以从我个人角度来看,UI 应该是不限语言的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX