2NUT
V2EX  ›  问与答

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

  •  
  •   2NUT · Sep 15, 2022 · 8563 views
    This topic created in 1516 days ago, the information mentioned may be changed or developed.
    公司要写个内部工具,简单讲就是读某批文件,然后提取处理后用图表展示出来;不兼容平台没关系,99.99%是 windows 。

    请教用什么技术栈方便?

    我思考了下 electron / qt / flutter

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

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

    先谢谢大家!
    Supplement 1  ·  Sep 16, 2022
    思考再三,还是 electron

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

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

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

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

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

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

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

    同样小工具。golang + wails+vue+element ui 写的
    kennnnnnnnnnn
    kennnnnnnnnnn
    Sep 16, 2022
    49
    qt 吃饭路过
    SekiBetu
    SekiBetu
    Sep 16, 2022
    50
    似乎已经只有.NET 和 electron 两种选择了
    agdhole
    agdhole
    Sep 16, 2022
    51
    wpf ,跨平台 maui 能用但不成熟
    liuyongwang
    liuyongwang
    Sep 16, 2022
    52
    winform 拖控件
    atempcode
    atempcode
    Sep 16, 2022
    53
    python + Excel
    charlie21
    charlie21
    Sep 16, 2022
    54
    直接外包给我,选都不用选
    conglovely
    conglovely
    Sep 16, 2022
    55
    内部人员用,winform 开发挺快的吧,拖拖拽拽写些事件 丑就丑点
    crayygy
    crayygy
    Sep 16, 2022
    56
    QT 不是蛮好的嘛,配合 QML
    triptipstop
    triptipstop
    Sep 16, 2022❤️1
    57
    管他什么平台,我都用原生。
    是的,就是要卷死各位。
    jones2000
    jones2000
    Sep 16, 2022
    58
    MFC
    defel
    defel
    Sep 17, 2022 via iPhone
    59
    直接 vb.net ,撸一个内部工具很容易,而且体积非常小。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   934 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 113ms · UTC 21:50 · PVG 05:50 · LAX 13:50 · JFK 16:50
    ♥ Do have faith in what you're doing.