\n**/\nmainForm.show();\nwin.loopMessage();\naardio + WebView2 入门教程:\nhttps://www.toutiao.com/article/7138285629548528139/?log_from=c9e52b8622336_1663288878642", "datePublished": "2022-09-16T01:18:47Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/g00001", "@type": "Person", "name": "g00001"}}, {"text": "对 java 熟悉的话,可以试试 jetpack compose", "datePublished": "2022-09-16T01:27:51Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/Akitora", "@type": "Person", "name": "Akitora"}}, {"text": "https://tauri.app/ 速度快", "datePublished": "2022-09-16T01:45:07Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/novolunt", "@type": "Person", "name": "novolunt"}}, {"text": "pywebview ,跨平台的 webview ,但没有什么人推荐,可能安全性不够吧。代码逻辑可以用 python 写,需要性能调用 c++。", "datePublished": "2022-09-16T01:49:17Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/BingoXuan", "@type": "Person", "name": "BingoXuan"}}, {"text": "你这个需求,electron 就是最简单的,哪还需要 c++,electron 可以直接调用 node 库度,页面 loading 做好点就行了。只是个内部工具,谁在乎性能多好、体积多小呢", "datePublished": "2022-09-16T02:03:38Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/daliusu", "@type": "Person", "name": "daliusu"}}, {"text": "flutter 要学 dart ,tauri 要学 rust ,electron 要学 node ,没一个省心的。", "interactionStatistic": {"userInteractionCount": 1, "@type": "InteractionCounter", "interactionType": "https://schema.org/LikeAction"}, "datePublished": "2022-09-16T02:28:40Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/darknoll", "@type": "Person", "name": "darknoll"}}, {"text": "这个需求还使用 winform/wpf 最舒服,其他技术栈坑太多,写着都生气", "datePublished": "2022-09-16T02:33:27Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/wdwwtzy", "@type": "Person", "name": "wdwwtzy"}}, {"text": "Win 下还得 winform/wpf, 目前我在边学边用 .net6 + wpf", "interactionStatistic": {"userInteractionCount": 1, "@type": "InteractionCounter", "interactionType": "https://schema.org/LikeAction"}, "datePublished": "2022-09-16T03:03:22Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/xieren58", "@type": "Person", "name": "xieren58"}}, {"text": "明明是单平台的需求为什么考虑的都是跨平台方案,不太理解。wpf 啥的不好吗", "interactionStatistic": {"userInteractionCount": 1, "@type": "InteractionCounter", "interactionType": "https://schema.org/LikeAction"}, "datePublished": "2022-09-16T03:12:20Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/lancelock", "@type": "Person", "name": "lancelock"}}, {"text": "首推 Web 技术栈,建议用 Go ,可以打包为单文件运行。\n可以参考下面这几个项目:\nhttps://github.com/sosedoff/pgweb\nhttps://github.com/pocketbase/pocketbase\nhttps://github.com/jeessy2/ddns-go", "datePublished": "2022-09-16T03:20:59Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/gowk", "@type": "Person", "name": "gowk"}}, {"text": "用网页不行吗", "datePublished": "2022-09-16T03:21:02Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/DualWield", "@type": "Person", "name": "DualWield"}}, {"text": "不跨平台,必须.net winform 或者 wpf", "interactionStatistic": {"userInteractionCount": 1, "@type": "InteractionCounter", "interactionType": "https://schema.org/LikeAction"}, "datePublished": "2022-09-16T03:22:15Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/onecode", "@type": "Person", "name": "onecode"}}, {"text": "直接用 cpp 内嵌个 web 服务就完了,壳都不用套,直接本地浏览器访问", "datePublished": "2022-09-16T03:35:26Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/newmlp", "@type": "Person", "name": "newmlp"}}, {"text": "web 还是最方便成熟,以前写过 delphi/winform ,效率和体验都和 web 没法比。\n楼上推 wpf ,这个东西的状态管理是用什么的,我去欣赏一下", "datePublished": "2022-09-16T04:14:48Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/makelove", "@type": "Person", "name": "makelove"}}, {"text": "Winform ,拖拖控件,写点事件响应代码就 ok 了,性能也不错。\n跨平台就 PyQT/PySide ,其他么蛾子不用考虑。", "datePublished": "2022-09-16T05:29:05Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/shijingshijing", "@type": "Person", "name": "shijingshijing"}}, {"text": "\n同样小工具。golang + wails+vue+element ui 写的", "datePublished": "2022-09-16T06:12:20Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/yekern", "@type": "Person", "name": "yekern"}}, {"text": "qt 吃饭路过", "datePublished": "2022-09-16T06:31:52Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/kennnnnnnnnnn", "@type": "Person", "name": "kennnnnnnnnnn"}}, {"text": "似乎已经只有.NET 和 electron 两种选择了", "datePublished": "2022-09-16T06:37:04Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/SekiBetu", "@type": "Person", "name": "SekiBetu"}}, {"text": "wpf ,跨平台 maui 能用但不成熟", "datePublished": "2022-09-16T06:44:47Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/agdhole", "@type": "Person", "name": "agdhole"}}, {"text": "winform 拖控件", "datePublished": "2022-09-16T07:48:47Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/liuyongwang", "@type": "Person", "name": "liuyongwang"}}, {"text": "python + Excel", "datePublished": "2022-09-16T08:00:40Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/atempcode", "@type": "Person", "name": "atempcode"}}, {"text": "直接外包给我,选都不用选", "datePublished": "2022-09-16T08:01:02Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/charlie21", "@type": "Person", "name": "charlie21"}}, {"text": "内部人员用,winform 开发挺快的吧,拖拖拽拽写些事件 丑就丑点", "datePublished": "2022-09-16T08:38:38Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/conglovely", "@type": "Person", "name": "conglovely"}}, {"text": "QT 不是蛮好的嘛,配合 QML", "datePublished": "2022-09-16T11:15:01Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/crayygy", "@type": "Person", "name": "crayygy"}}, {"text": "管他什么平台,我都用原生。\n是的,就是要卷死各位。", "interactionStatistic": {"userInteractionCount": 1, "@type": "InteractionCounter", "interactionType": "https://schema.org/LikeAction"}, "datePublished": "2022-09-16T11:30:00Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/triptipstop", "@type": "Person", "name": "triptipstop"}}, {"text": "MFC", "datePublished": "2022-09-16T11:38:39Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/jones2000", "@type": "Person", "name": "jones2000"}}, {"text": "直接 vb.net ,撸一个内部工具很容易,而且体积非常小。", "datePublished": "2022-09-16T19:18:20Z", "@type": "Comment", "author": {"url": "https://www.v2ex.com/member/defel", "@type": "Person", "name": "defel"}}], "interactionStatistic": [{"userInteractionCount": 7856, "@type": "InteractionCounter", "interactionType": "https://schema.org/ViewAction"}, {"userInteractionCount": 30, "@type": "InteractionCounter", "interactionType": "https://schema.org/LikeAction"}, {"userInteractionCount": 59, "@type": "InteractionCounter", "interactionType": "https://schema.org/ReplyAction"}], "text": "公司要写个内部工具,简单讲就是读某批文件,然后提取处理后用图表展示出来;不兼容平台没关系,99.99%是 windows 。\n请教用什么技术栈方便?\n我思考了下 electron / qt / flutter\nflutter dart 不会先排除; qt 写过, 前端技术栈也会用;有点冲动想试试 electron , 请教这个比 qml 方便么,主要考察 是否容易美化,是否容易集成数据可视化;\n如果用 electron ,会采用前后端的模式,核心处理代码用 c++,然后和前端 electron 通信;如果 qt 那就是 c++ 单体了。\n先谢谢大家!", "datePublished": "2022-09-15T12:20:21Z", "commentCount": 59, "mainEntityOfPage": "https://www.v2ex.com/t/880360", "author": {"url": "https://www.v2ex.com/member/2NUT", "@type": "Person", "name": "2NUT"}, "headline": "桌面软件开发 2022 年 用啥技术栈?", "@type": "DiscussionForumPosting", "url": "https://www.v2ex.com/t/880360", "isPartOf": {"url": "https://www.v2ex.com/go/qna", "@type": "WebPage", "name": "问与答"}, "@context": "https://schema.org", "dateModified": "2022-09-15T12:20:45Z"}
1
ysc3839 2022 年 9 月 15 日 via Android 如果选择 Electron 但后端不需要 Node.js 的话,可以考虑直接用 C++调用 Edge WebView2 ,好处是省去 Node.js 和 C++对接的部分,坏处是要稍微多写点代码。
https://docs.microsoft.com/en-us/microsoft-edge/webview2/ |
6
semoon 2022 年 9 月 15 日
java 技术栈,强烈安利 javafx
|
8
mineralsalt 2022 年 9 月 15 日
javafx 挺好用的
|
9
ysc3839 2022 年 9 月 15 日 via Android
@2NUT Win7 也支持,不过可能很快就会停止支持了,不需要安装 Edge ,需要安装独立的 Edge WebView2 Runtime 。
|
10
AllenHua 2022 年 9 月 15 日
|
11
treblex 2022 年 9 月 15 日
试试 tauri 和 rust ,比 Electron 轻量很多,前端 js 各种框架都可以选
平台支持 win,linux,mac |
12
tool2d 2022 年 9 月 15 日 虽然 V2 前端很多,但是我个人并不推荐用前端写桌面程序,UI 代码的耦合性太低。
如果你用 opengl 写 UI ,换个低层引擎可以 port 到任意平台,但是前端技术不一样,不管怎么移植,都必须背上浏览器这个沉重的外壳。 我很喜欢 electron ,但仅仅是喜欢。想要代码长寿,就必须把代码切成非常小的模块。 |
14
erguotou521 2022 年 9 月 15 日 via Android
做成 bs 结构?软件运行后只有一个后台服务并自动打开浏览器跳转到前端 url 就够了
|
16
512357301 2022 年 9 月 15 日 via Android
aardio 呢,应该能满足条件,语法接近 JS ,功能 electron 也不差,而且很小巧
|
18
renmu 2022 年 9 月 16 日 via Android 这种内部工具压根就不在意大小,electron 能用最新特性,不用考虑兼容性可太香了
|
19
tool2d 2022 年 9 月 16 日
|
20
Aloento 2022 年 9 月 16 日
JavaFX / Windows APP SDK (这个绝佳)
|
21
Jirajine 2022 年 9 月 16 日 electron 之类的,根本没必要。你这需求哪里有做成 app 的需求了?直接起个本地 HTTP 服务,糊个前端界面搁浏览器里打开不就完事。
|
22
imycc 2022 年 9 月 16 日
你这个需求,不是搞个内部系统方便一点吗,给个上传文件的接口,处理完用网页展示即可,省去应用打包和更新的负担。
|
23
mxT52CRuqR6o5 2022 年 9 月 16 日 via Android
数据可视化的话,web 技术栈的平台可能确实有些优势
|
24
wangningkai 2022 年 9 月 16 日 via iPhone 如果会 go 的话,wails 也可以考虑
|
25
ShinichiYao 2022 年 9 月 16 日
vb 拖几个控件的事
|
26
villivateur 2022 年 9 月 16 日 其实你可以学一学 WPF ,如果有前端开发经验的话,真的非常简单, .NET 开发现在非常友好
|
27
wuxiaoqing234 2022 年 9 月 16 日
@villivateur wpf 那成熟度跟 react 没法比吧。。。 是我选我也用 html+css +ant design
|
28
villivateur 2022 年 9 月 16 日 @wuxiaoqing234 OP 的环境主要是 Windows ,WPF 的成熟度比 React 不知道高到哪里去了
|
29
villivateur 2022 年 9 月 16 日
@villivateur 而且 C# 调用 C++ 的库也非常方便
|
30
tairan2006 2022 年 9 月 16 日 纯 windows 肯定 winform/wpf 了…甚至用 vb 都特么可以。
|
31
god7d 2022 年 9 月 16 日 首选 winform ,论成熟的话这已经快要踏进坟墓了,论上手速度和开发速度,只要不是深入开发,拖拽控件相信一下午就能上手,一小时就能完成一些一般难度的界面。
缺点就是界面丑了点,适配比较差,不过你开发的是内部工具估计也不在意这些,winform 只要自己愿意花时间,也是可以做的很漂亮的 |
32
wuxiaoqing234 2022 年 9 月 16 日
@villivateur wpf 那 xml mvvm... op 的需求明显是 etl ,可视化处理 ,需要调用啥 c++库。echart, ant chart 这些不香吗
|
33
g00001 2022 年 9 月 16 日
Electron 里弄 C++ , 那会很累的。
Electron 最要命的还不是体积大,你用 .NET 6 体积也很大,但是后面会越来越小。 Electron 要命的是会越写越大,搞不好就给你来个五六百 MB 。 如果没有跨平台的包袱,WebView2 的优势很多。 而且 WebView2 是共享组件,Win11 自带 ,Win7 这些可以自动安装(速度很快,不用写代码)。 下面写个例子: 先写几句 aardio 代码给 WebView2 套个壳子,不会 aardio 没关系,因为不需要再写更多 aardio 代码了。然后 JavaScript 就可以方便地调用 C++ 写的 DLL 。其他就可以直接用 JavaScript 和 C++ 写了。 import win.ui; mainForm = win.form(text="WebView2") //创建浏览器组件 import web.view; var wb = web.view(mainForm); //导出本地函数给网页 JavaScript wb.external = { callNative = function(str){ return ::User32.MessageBox(0,str,"JavaScript 调用 WinAPI 测试",0) } } //写入网页 HTML wb.html = /** <html><head> <script> aardio.callNative(); </script> **/ mainForm.show(); win.loopMessage(); aardio + WebView2 入门教程: https://www.toutiao.com/article/7138285629548528139/?log_from=c9e52b8622336_1663288878642 |
34
Akitora 2022 年 9 月 16 日
对 java 熟悉的话,可以试试 jetpack compose
|
35
novolunt 2022 年 9 月 16 日
|
36
BingoXuan 2022 年 9 月 16 日
pywebview ,跨平台的 webview ,但没有什么人推荐,可能安全性不够吧。代码逻辑可以用 python 写,需要性能调用 c++。
|
37
daliusu 2022 年 9 月 16 日
你这个需求,electron 就是最简单的,哪还需要 c++,electron 可以直接调用 node 库度,页面 loading 做好点就行了。只是个内部工具,谁在乎性能多好、体积多小呢
|
38
darknoll 2022 年 9 月 16 日 flutter 要学 dart ,tauri 要学 rust ,electron 要学 node ,没一个省心的。
|
39
wdwwtzy 2022 年 9 月 16 日
这个需求还使用 winform/wpf 最舒服,其他技术栈坑太多,写着都生气
|
40
xieren58 2022 年 9 月 16 日 Win 下还得 winform/wpf, 目前我在边学边用 .net6 + wpf
|
41
lancelock 2022 年 9 月 16 日 明明是单平台的需求为什么考虑的都是跨平台方案,不太理解。wpf 啥的不好吗
|
42
gowk 2022 年 9 月 16 日
首推 Web 技术栈,建议用 Go ,可以打包为单文件运行。
可以参考下面这几个项目: https://github.com/sosedoff/pgweb https://github.com/pocketbase/pocketbase https://github.com/jeessy2/ddns-go |
43
DualWield 2022 年 9 月 16 日
用网页不行吗
|
45
newmlp 2022 年 9 月 16 日
直接用 cpp 内嵌个 web 服务就完了,壳都不用套,直接本地浏览器访问
|
46
makelove 2022 年 9 月 16 日
web 还是最方便成熟,以前写过 delphi/winform ,效率和体验都和 web 没法比。
楼上推 wpf ,这个东西的状态管理是用什么的,我去欣赏一下 |
47
shijingshijing 2022 年 9 月 16 日
Winform ,拖拖控件,写点事件响应代码就 ok 了,性能也不错。
跨平台就 PyQT/PySide ,其他么蛾子不用考虑。 |
48
yekern 2022 年 9 月 16 日

同样小工具。golang + wails+vue+element ui 写的 |
49
kennnnnnnnnnn 2022 年 9 月 16 日
qt 吃饭路过
|
50
SekiBetu 2022 年 9 月 16 日
似乎已经只有.NET 和 electron 两种选择了
|
51
agdhole 2022 年 9 月 16 日
wpf ,跨平台 maui 能用但不成熟
|
52
liuyongwang 2022 年 9 月 16 日
winform 拖控件
|
53
atempcode 2022 年 9 月 16 日
python + Excel
|
54
charlie21 2022 年 9 月 16 日
直接外包给我,选都不用选
|
55
conglovely 2022 年 9 月 16 日
内部人员用,winform 开发挺快的吧,拖拖拽拽写些事件 丑就丑点
|
56
crayygy 2022 年 9 月 16 日
QT 不是蛮好的嘛,配合 QML
|
57
triptipstop 2022 年 9 月 16 日 管他什么平台,我都用原生。
是的,就是要卷死各位。 |
58
jones2000 2022 年 9 月 16 日
MFC
|