V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
2NUT
V2EX  ›  问与答

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

  •  
  •   2NUT · 2022-09-15 20:20:21 +08:00 · 6380 次点击
    这是一个创建于 581 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司要写个内部工具,简单讲就是读某批文件,然后提取处理后用图表展示出来;不兼容平台没关系,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 这些可以自动安装(速度很快,不用写代码)。

    下面写个例子:

    先写几句 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
    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   ·   我们的愿景   ·   实用小工具   ·   3495 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 04:53 · PVG 12:53 · LAX 21:53 · JFK 00:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.