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 平台的桌面程序?或是还有什么更好的方案?

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

11795 次点击
所在节点    程序员
131 条回复
aoeui
2022-03-20 01:37:37 +08:00
可以等 MAUI ?微软官方的,应该比较稳定
duke807
2022-03-20 01:41:50 +08:00
@3dwelcome
我覺得對性能要求不高的還是直接用 html5 最方便。

對性能要求高的,可以 wxWidgets 內置 webview 負責性能不高的模塊,可以跑 js ,對性能要求高的部分用傳統的方式。
而且傳統方式也有界面 designer 工具,可以生成代碼。
3dwelcome
2022-03-20 01:43:53 +08:00
@duke807 "而且 wxWidgets 的版權也比 qt 好很多,qt 越来越不行了。"

QT 的学习资源多。大厂 QT 就和前端里 React 地位一样,团队作战肯定优先选择最主流的框架。

除非是一个人开发,进度不紧不慢,可以让你慢慢学。
3dwelcome
2022-03-20 01:45:54 +08:00
@duke807 楼主说了,不喜欢 webview 吧。

但我还是忍不住替浏览器说一句,WASM 是真喵的快。JS 代码比 C++慢,但 WASM 真的不比 C++慢多少,贼快。
duke807
2022-03-20 01:56:43 +08:00
@3dwelcome
wxWidgets 真的不弱,也很老牌,我以前沒把它當回事,一直覺得 qt 才是 no.1 ,後來也是通過 kicad 才知道 wxWidgets 比 qt 好,kicad 現在算是電子行業的主流軟件了,除了是極客和開源社區的唯一選擇之外,企業用戶也在大規模使用。

與之對比的是用 qt 寫的 eagle 畫板軟件,用戶基本上都轉用 kicad 了。

瀏覽器如果界面交互用 wasm 做,那麼也就享受不到 h5 做界面的好處了,wasm 一般不是拿來做界面交互的,頂多做一些波形之類的展示。
3dwelcome
2022-03-20 02:04:03 +08:00
@duke807 我上面说过了,不是说 wxWidgets 功能不好,而是 wx 和 C++语言联系太密切了。

这样的话,就很不好把界面部分作为独立模块,给完全独立出去。也就是我说的,最好的开发界面方式,应该是 filecxx 那种 sml ,用 DSL 来写。QT 至少有 qml ,不说功能对比,单从后期代码维护上,QT 是优于 WX 的。

其实 2022 年了,语言混编才是王道。死磕一种语言,真没什么前途。
3dwelcome
2022-03-20 02:12:51 +08:00
@duke807

"瀏覽器如果界面交互用 wasm 做,那麼也就享受不到 h5 做界面的好處了"

我在 wasm 里内嵌 React 之类的 JSX 来声明界面,代码需要编译后才能用,我自己都觉得挺奇葩。

反正代码能运行就行了,管那么多。
duke807
2022-03-20 02:14:45 +08:00
qt 寫的 eagle 也曾風光一時,落寞的原因主要因為它不是開源軟件,它只是受限免費的跨平台軟件。
不過 qt 不是原生圖形控件,這一點也不如 wxWidgets 。

@3dwelcome 傳統 gui 也是可以把界面做為獨立模塊的,譬如寫一個獨立的控件,整體 gui 也是可以獨立的,你自己做好區分就可以,有些代碼只負責前台,有些代碼只負責後台,明確前後台的通訊管道。

而且,我覺得 qml 這種的效率和 html 差不多,為何不直接用 html ,不用重複學習,調試還方便。做好的 html 可以用多種途徑呈現。
wdhwg001
2022-03-20 02:20:05 +08:00
flutter 的 win 桌面连个 cleartype 支持都没,真的还是别考虑了。

一定要成熟稳定的原生跨平台的话,或许可以跳出来试一下比较传统的 lazarus 。
3dwelcome
2022-03-20 02:25:29 +08:00
@duke807 "為何不直接用 html ,不用重複學習,調試還方便。"

CSS 太复杂了,需要套一层 webview 才能用。好一点的 webview ,体积都不小,这是楼主考虑的最大问题。

"傳統 gui 也是可以把界面做為獨立模塊的", 这点要在软件一开始设计的时候,就考虑清楚。我真不觉得你能把一个和 wxwidget 强关联的软件,把 wx 整个剥离出去。wx 使用方便的代价,就是强入侵性。

有人喜欢这种,我是不喜欢的。我喜欢每个模块都能随便替换,比如游戏开发,你 DirectX, OpenGL 都是可以随便换的。
agagega
2022-03-20 02:52:09 +08:00
Xamarin 也可以支持 Mac 的。你可以找找看这些不同技术对应的代表性软件,用一下就有感受了
neoblackcap
2022-03-20 03:30:37 +08:00
C#跟 C++不是对立的,完全可以用 C#写界面,然后调用 C++。C#调用 C++的库还算好调用。
然后跨平台,C#也有一些界面库,但是好不用就难说。
Qt 在这方面无论是稳定还是界面的好看,都相当出色。哪怕协议也是有 LGPL 让你选。开发商用软件都没问题。

其实还有第三条路,那么就是你自己写一个。使用一些图形库,直接写界面库,效率贼高,而且可以随便迁移(只需要写一个 render adapter ,基于 IMGUI ,帧数还能上升到 60fps 以上),这方面的例子就是 sublime text
lisongeee
2022-03-20 04:01:58 +08:00
如果比较在乎打包大小可以用 Tauri ,宿主环境是 rust ,调用的系统 webview ,当然就得考虑 webview 兼容性和平台差异了
exploreexe
2022-03-20 05:52:23 +08:00
现在想想,web 技术果然是牛逼,真正的实现了跨平台。
你要想在 Mac 上流畅,按照苹果的尿性还是得上原生。Electron 这玩意开发的东西,我个人感觉能用,但是谈不上好用。
janxin
2022-03-20 08:18:54 +08:00
考虑你提到了稳定流畅,目前的跨平台方案都多少有点问题

wxWidgets 到目前为止都不支持 Apple Silicon...
daokedao
2022-03-20 08:32:23 +08:00
启动快只能是 C++
C# 启动速度比 Electron 还慢吧?
leyviw
2022-03-20 08:47:39 +08:00
cef
nonduality
2022-03-20 08:59:56 +08:00
别的不说,支持 OP 不使用 Electron 。Electron 就是一毒瘤。
charlie21
2022-03-20 09:13:53 +08:00
这选择这其实是一种捕食行为,又想吃得好 又想便宜 还怕吃坏了闹肚子。可能只有真正的试吃员能给你答案
cmdOptionKana
2022-03-20 09:18:39 +08:00
要用户体验好,前提是把东西做出来,用户才能体验。用 Electron ,提问的时间里 demo 已经跑起来了。不用 Electron ,我甚至怀疑你最终会选择放弃项目。

而且,Electron 还能让 Linux 用户受惠,没有 Electron 的时候 Linux 用户直接被忽略不计。

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

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

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

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

© 2021 V2EX