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

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

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

    请教用什么技术栈方便?

    我思考了下 electron / qt / flutter

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

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

    先谢谢大家!
    第 1 条附言  ·  75 天前
    思考再三,还是 electron

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

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

    我很喜欢 electron ,但仅仅是喜欢。想要代码长寿,就必须把代码切成非常小的模块。
    2NUT
        13
    2NUT  
    OP
       75 天前
    @treblex #11 我应该一个月学不会 rust...

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

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

    缺点就是界面丑了点,适配比较差,不过你开发的是内部工具估计也不在意这些,winform 只要自己愿意花时间,也是可以做的很漂亮的
    wuxiaoqing234
        32
    wuxiaoqing234  
       74 天前
    @villivateur wpf 那 xml mvvm... op 的需求明显是 etl ,可视化处理 ,需要调用啥 c++库。echart, ant chart 这些不香吗
    g00001
        33
    g00001  
       74 天前
    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  
       74 天前
    对 java 熟悉的话,可以试试 jetpack compose
    novolunt
        35
    novolunt  
       74 天前
    BingoXuan
        36
    BingoXuan  
       74 天前
    pywebview ,跨平台的 webview ,但没有什么人推荐,可能安全性不够吧。代码逻辑可以用 python 写,需要性能调用 c++。
    daliusu
        37
    daliusu  
       74 天前
    你这个需求,electron 就是最简单的,哪还需要 c++,electron 可以直接调用 node 库度,页面 loading 做好点就行了。只是个内部工具,谁在乎性能多好、体积多小呢
    darknoll
        38
    darknoll  
       74 天前
    flutter 要学 dart ,tauri 要学 rust ,electron 要学 node ,没一个省心的。
    wdwwtzy
        39
    wdwwtzy  
       74 天前
    这个需求还使用 winform/wpf 最舒服,其他技术栈坑太多,写着都生气
    xieren58
        40
    xieren58  
       74 天前   ❤️ 1
    Win 下还得 winform/wpf, 目前我在边学边用 .net6 + wpf
    lancelock
        41
    lancelock  
       74 天前   ❤️ 1
    明明是单平台的需求为什么考虑的都是跨平台方案,不太理解。wpf 啥的不好吗
    gowk
        42
    gowk  
       74 天前
    首推 Web 技术栈,建议用 Go ,可以打包为单文件运行。
    可以参考下面这几个项目:
    https://github.com/sosedoff/pgweb
    https://github.com/pocketbase/pocketbase
    https://github.com/jeessy2/ddns-go
    DualWield
        43
    DualWield  
       74 天前
    用网页不行吗
    onecode
        44
    onecode  
       74 天前   ❤️ 1
    不跨平台,必须.net winform 或者 wpf
    newmlp
        45
    newmlp  
       74 天前
    直接用 cpp 内嵌个 web 服务就完了,壳都不用套,直接本地浏览器访问
    makelove
        46
    makelove  
       74 天前
    web 还是最方便成熟,以前写过 delphi/winform ,效率和体验都和 web 没法比。

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

    同样小工具。golang + wails+vue+element ui 写的
    kennnnnnnnnnn
        49
    kennnnnnnnnnn  
       74 天前
    qt 吃饭路过
    SekiBetu
        50
    SekiBetu  
       74 天前
    似乎已经只有.NET 和 electron 两种选择了
    agdhole
        51
    agdhole  
       74 天前
    wpf ,跨平台 maui 能用但不成熟
    liuyongwang
        52
    liuyongwang  
       74 天前
    winform 拖控件
    atempcode
        53
    atempcode  
       74 天前
    python + Excel
    charlie21
        54
    charlie21  
       74 天前
    直接外包给我,选都不用选
    conglovely
        55
    conglovely  
       74 天前
    内部人员用,winform 开发挺快的吧,拖拖拽拽写些事件 丑就丑点
    crayygy
        56
    crayygy  
       74 天前
    QT 不是蛮好的嘛,配合 QML
    triptipstop
        57
    triptipstop  
       74 天前
    管他什么平台,我都用原生。
    是的,就是要卷死各位。
    jones2000
        58
    jones2000  
       74 天前
    MFC
    defel
        59
    defel  
       74 天前 via iPhone
    直接 vb.net ,撸一个内部工具很容易,而且体积非常小。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1192 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 21:27 · PVG 05:27 · LAX 13:27 · JFK 16:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.