桌面软件开发 2022 年 用啥技术栈? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
2NUT
V2EX    问与答

桌面软件开发 2022 年 用啥技术栈?

  •  
  •   2NUT 2022-09-15 20:20:21 +08:00 7445 次点击
    这是一个创建于 1121 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司要写个内部工具,简单讲就是读某批文件,然后提取处理后用图表展示出来;不兼容平台没关系,99.99%是 windows 。

    请教用什么技术栈方便?

    我思考了下 electron / qt / flutter

    flutter dart 不会先排除; qt 写过, 前端技术栈也会用;有点冲动想试试 electron , 请教这个比 qml 方便么,主要考察 是否容易美化,是否容易集成数据可视化;

    如果用 electron ,会采用前后端的模式,核心处理代码用 c++,然后和前端 electron 通信;如果 qt 那就是 c++ 单体了。

    先谢谢大家!
    第 1 条附言    2022-09-16 00:19:41 +08:00
    思考再三,还是 electron

    成熟简单(相对,虽然我对 css 很头疼),可视化库多,性能可以用 c++ 模块去补足
    59 条回复    2022-09-17 03:18:20 +08:00
    ysc3839
        1
    ysc3839  
       2022-09-15 20:29:38 +08:00 via Android   3
    如果选择 Electron 但后端不需要 Node.js 的话,可以考虑直接用 C++调用 Edge WebView2 ,好处是省去 Node.js 和 C++对接的部分,坏处是要稍微多写点代码。
    https://docs.microsoft.com/en-us/microsoft-edge/webview2/
    2NUT
        2
    2NUT  
    OP
       2022-09-15 20:32:01 +08:00
    @ysc3839 #1 这一套是不是只兼容 windows 10 呢?
    Manweill
        3
    Manweill  
       2022-09-15 20:32:34 +08:00   1
    99.99% windows 这不用.NET 技术栈的吗? WPF/MAUI 之类。如果不考虑性能 electron 优先选择。
    2NUT
        4
    2NUT  
    OP
       2022-09-15 20:33:34 +08:00
    @2NUT #2 看到了 windows 7 也兼容, 要先安装 edge ?
    2NUT
        5
    2NUT  
    OP
       2022-09-15 20:34:00 +08:00
    @Manweill #3 恰巧不会 .net 年纪大 懒得学了
    semoon
        6
    semoon  
       2022-09-15 20:36:02 +08:00
    java 技术栈,强烈安利 javafx
    2NUT
        7
    2NUT  
    OP
       2022-09-15 20:38:42 +08:00
    @semoon #6 数据可视化方便么?
    mineralsalt
        8
    mineralsalt  
       2022-09-15 21:15:55 +08:00
    javafx 挺好用的
    ysc3839
        9
    ysc3839  
       2022-09-15 22:28:55 +08:00 via Android
    @2NUT Win7 也支持,不过可能很快就会停止支持了,不需要安装 Edge ,需要安装独立的 Edge WebView2 Runtime 。
    AllenHua
        10
    AllenHua  
       2022-09-15 22:29:44 +08:00
    treblex
        11
    treblex  
       2022-09-15 22:45:58 +08:00
    试试 tauri 和 rust ,比 Electron 轻量很多,前端 js 各种框架都可以选
    平台支持 win,linux,mac
    tool2d
        12
    tool2d  
       2022-09-15 23:06:43 +08:00   3
    虽然 V2 前端很多,但是我个人并不推荐用前端写桌面程序,UI 代码的耦合性太低。

    如果你用 opengl 写 UI ,换个低层引擎可以 port 到任意平台,但是前端技术不一样,不管怎么移植,都必须背上浏览器这个沉重的外壳。

    我很喜欢 electron ,但仅仅是喜欢。想要代码长寿,就必须把代码切成非常小的模块。
    2NUT
        13
    2NUT  
    OP
       2022-09-15 23:15:43 +08:00
    @treblex #11 我应该一个月学不会 rust...

    之前一直关注一个 gui 项目叫 imgui ,想试试,宣传优点是使用简单
    erguotou521
        14
    erguotou521  
       2022-09-15 23:20:12 +08:00 via Android
    做成 bs 结构?软件运行后只有一个后台服务并自动打开浏览器跳转到前端 url 就够了
    ysc3839
        15
    ysc3839  
       2022-09-15 23:24:21 +08:00 via Android
    @2NUT imgui 不太可能比 Web 简单吧?而且 imgui 是实时刷新的,没有更新机制,非常消耗性能
    512357301
        16
    512357301  
       2022-09-15 23:34:37 +08:00 via Android
    aardio 呢,应该能满足条件,语法接近 JS ,功能 electron 也不差,而且很小巧
    2NUT
        17
    2NUT  
    OP
       2022-09-15 23:40:57 +08:00
    @ysc3839 #15 机器累点,人的角度简单些
    renmu
        18
    renmu  
       2022-09-16 00:39:23 +08:00 via Android   1
    这种内部工具压根就不在意大小,electron 能用最新特性,不用考虑兼容性可太香了
    tool2d
        19
    tool2d  
       2022-09-16 01:13:00 +08:00
    @ysc3839 老外有过对比,实时刷新的 UI ,状态管理确实要比 Web 简单一些。

    React 光维护各种状态,就已经变成一个大框架了。而 imgui 大部分状态都可以每帧实时获取。
    Aloento
        20
    Aloento  
       2022-09-16 02:01:07 +08:00
    JavaFX / Windows APP SDK (这个绝佳)
    Jirajine
        21
    Jirajine  
       2022-09-16 02:09:33 +08:00   1
    electron 之类的,根本没必要。你这需求哪里有做成 app 的需求了?直接起个本地 HTTP 服务,糊个前端界面搁浏览器里打开不就完事。
    imycc
        22
    imycc  
       2022-09-16 03:12:02 +08:00
    你这个需求,不是搞个内部系统方便一点吗,给个上传文件的接口,处理完用网页展示即可,省去应用打包和更新的负担。
    mxT52CRuqR6o5
        23
    mxT52CRuqR6o5  
       2022-09-16 03:21:21 +08:00 via Android
    数据可视化的话,web 技术栈的平台可能确实有些优势
    wangningkai
        24
    wangningkai  
       2022-09-16 06:12:46 +08:00 via iPhone   1
    如果会 go 的话,wails 也可以考虑
    ShinichiYao
        25
    ShinichiYao  
       2022-09-16 07:49:24 +08:00
    vb 拖几个控件的事
    villivateur
        26
    villivateur  
       2022-09-16 08:29:17 +08:00   1
    其实你可以学一学 WPF ,如果有前端开发经验的话,真的非常简单, .NET 开发现在非常友好
    wuxiaoqing234
        27
    wuxiaoqing234  
       2022-09-16 08:43:04 +08:00
    @villivateur wpf 那成熟度跟 react 没法比吧。。。 是我选我也用 html+css +ant design
    villivateur
        28
    villivateur  
       2022-09-16 08:55:02 +08:00   1
    @wuxiaoqing234 OP 的环境主要是 Windows ,WPF 的成熟度比 React 不知道高到哪里去了
    villivateur
        29
    villivateur  
       2022-09-16 08:55:49 +08:00
    @villivateur 而且 C# 调用 C++ 的库也非常方便
    tairan2006
        30
    tairan2006  
       2022-09-16 08:57:01 +08:00   1
    纯 windows 肯定 winform/wpf 了…甚至用 vb 都特么可以。
    god7d
        31
    god7d  
       2022-09-16 08:59:58 +08:00   1
    首选 winform ,论成熟的话这已经快要踏进坟墓了,论上手速度和开发速度,只要不是深入开发,拖拽控件相信一下午就能上手,一小时就能完成一些一般难度的界面。

    缺点就是界面丑了点,适配比较差,不过你开发的是内部工具估计也不在意这些,winform 只要自己愿意花时间,也是可以做的很漂亮的
    wuxiaoqing234
        32
    wuxiaoqing234  
       2022-09-16 09:13:19 +08:00
    @villivateur wpf 那 xml mvvm... op 的需求明显是 etl ,可视化处理 ,需要调用啥 c++库。echart, ant chart 这些不香吗
    g00001
        33
    g00001  
       2022-09-16 09:18:47 +08:00
    Electron 里弄 C++ , 那会很累的。
    Electron 最要命的还不是体积大,你用 .NET 6 体积也很大,但是后面会越来越小。
    Electron 要命的是会越写越大,搞不好就给你来个五六百 MB 。

    如果没有跨平台的包袱,WebView2 的优势很多。
    而且 WebView2 是共享组件,Win11 自带 ,Win7 这些可以自动安装(速度很快,不用写代码)。

    下面写个例子:

    先写几句 ardio 代码给 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
    Akitora
        34
    Akitora  
       2022-09-16 09:27:51 +08:00
    对 java 熟悉的话,可以试试 jetpack compose
    novolunt
        35
    novolunt  
       2022-09-16 09:45:07 +08:00
    BingoXuan
        36
    BingoXuan  
       2022-09-16 09:49:17 +08:00
    pywebview ,跨平台的 webview ,但没有什么人推荐,可能安全性不够吧。代码逻辑可以用 python 写,需要性能调用 c++。
    daliusu
        37
    daliusu  
       2022-09-16 10:03:38 +08:00
    你这个需求,electron 就是最简单的,哪还需要 c++,electron 可以直接调用 node 库度,页面 loading 做好点就行了。只是个内部工具,谁在乎性能多好、体积多小呢
    darknoll
        38
    darknoll  
       2022-09-16 10:28:40 +08:00   1
    flutter 要学 dart ,tauri 要学 rust ,electron 要学 node ,没一个省心的。
    wdwwtzy
        39
    wdwwtzy  
       2022-09-16 10:33:27 +08:00
    这个需求还使用 winform/wpf 最舒服,其他技术栈坑太多,写着都生气
    xieren58
        40
    xieren58  
       2022-09-16 11:03:22 +08:00   1
    Win 下还得 winform/wpf, 目前我在边学边用 .net6 + wpf
    lancelock
        41
    lancelock  
       2022-09-16 11:12:20 +08:00   1
    明明是单平台的需求为什么考虑的都是跨平台方案,不太理解。wpf 啥的不好吗
    gowk
        42
    gowk  
       2022-09-16 11:20:59 +08:00
    首推 Web 技术栈,建议用 Go ,可以打包为单文件运行。
    可以参考下面这几个项目:
    https://github.com/sosedoff/pgweb
    https://github.com/pocketbase/pocketbase
    https://github.com/jeessy2/ddns-go
    DualWield
        43
    DualWield  
       2022-09-16 11:21:02 +08:00
    用网页不行吗
    onecode
        44
    onecode  
       2022-09-16 11:22:15 +08:00   1
    不跨平台,必须.net winform 或者 wpf
    newmlp
        45
    newmlp  
       2022-09-16 11:35:26 +08:00
    直接用 cpp 内嵌个 web 服务就完了,壳都不用套,直接本地浏览器访问
    makelove
        46
    makelove  
       2022-09-16 12:14:48 +08:00
    web 还是最方便成熟,以前写过 delphi/winform ,效率和体验都和 web 没法比。

    楼上推 wpf ,这个东西的状态管理是用什么的,我去欣赏一下
    shijingshijing
        47
    shijingshijing  
       2022-09-16 13:29:05 +08:00
    Winform ,拖拖控件,写点事件响应代码就 ok 了,性能也不错。
    跨平台就 PyQT/PySide ,其他么蛾子不用考虑。
    yekern
        48
    yekern  
       2022-09-16 14:12:20 +08:00
    ![]( https://images.esc.show/img/202209161411131.png)

    同样小工具。golang + wails+vue+element ui 写的
    kennnnnnnnnnn
        49
    kennnnnnnnnnn  
       2022-09-16 14:31:52 +08:00
    qt 吃饭路过
    SekiBetu
        50
    SekiBetu  
       2022-09-16 14:37:04 +08:00
    似乎已经只有.NET 和 electron 两种选择了
    agdhole
        51
    agdhole  
       2022-09-16 14:44:47 +08:00
    wpf ,跨平台 maui 能用但不成熟
    liuyongwang
        52
    liuyongwang  
       2022-09-16 15:48:47 +08:00
    winform 拖控件
    atempcode
        53
    atempcode  
       2022-09-16 16:00:40 +08:00
    python + Excel
    charlie21
        54
    charlie21  
       2022-09-16 16:01:02 +08:00
    直接外包给我,选都不用选
    conglovely
        55
    conglovely  
       2022-09-16 16:38:38 +08:00
    内部人员用,winform 开发挺快的吧,拖拖拽拽写些事件 丑就丑点
    crayygy
        56
    crayygy  
       2022-09-16 19:15:01 +08:00
    QT 不是蛮好的嘛,配合 QML
    triptipstop
        57
    triptipstop  
       2022-09-16 19:30:00 +08:00   1
    管他什么平台,我都用原生。
    是的,就是要卷死各位。
    jones2000
        58
    jones2000  
       2022-09-16 19:38:39 +08:00
    MFC
    defel
        59
    defel  
       2022-09-17 03:18:20 +08:00 via iPhone
    直接 vb.net ,撸一个内部工具很容易,而且体积非常小。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2299 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 15:51 PVG 23:51 LAX 08:51 JFK 11:51
    Do have faith in what you'r doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86