V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
csulyb
V2EX  ›  程序员

现在有没有好的跨平台的 UI 库

  •  1
     
  •   csulyb · 2021-03-03 15:52:02 +08:00 · 12922 次点击
    这是一个创建于 1367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想做一款类似百度网盘(主要 UI 很类似)的软件,之前一直 mfc+soui 在 windows 开发,由于需要到多平台运行,考虑 4 种方案来开发: 1.net+wpf 2.java 3.qt 4.electron 或者 nw (发布的包有点大,基本排除)

    大家有没有好的推荐,选择哪个好点?

    85 条回复    2021-03-05 11:22:50 +08:00
    ysc3839
        1
    ysc3839  
       2021-03-03 16:03:16 +08:00 via Android
    你的方案里 1 是不能跨平台的,2 已经不太流行了,只剩下 3 4 可选,你又觉得 4 太大,那只有 3 了。
    fixend
        2
    fixend  
       2021-03-03 16:06:47 +08:00
    我的话,只考虑 Flutter 或 electron
    PUBG98k
        3
    PUBG98k  
       2021-03-03 16:10:34 +08:00
    csulyb
        4
    csulyb  
    OP
       2021-03-03 16:17:13 +08:00
    @ysc3839 qt 好像现在使用的人不多,怕采坑
    @fixend Flutter 坑多吗, 有没案例
    csulyb
        5
    csulyb  
    OP
       2021-03-03 16:29:26 +08:00
    @PUBG98k 多谢,我了解了下,好像国内没有商业产品用这个
    Shazoo
        6
    Shazoo  
       2021-03-03 16:33:21 +08:00   ❤️ 2
    2 年前,也纠结 QT 还是 Electron 。最后选了 Electron……

    好吧,这个项目到现在都还没结束……您细品。
    HeapOverflow
        7
    HeapOverflow  
       2021-03-03 16:34:46 +08:00
    discord 和 slack 桌面版都用的 electron,用户体验都很很不错。
    fixend
        8
    fixend  
       2021-03-03 16:42:06 +08:00   ❤️ 2
    @csulyb electron 相对成熟,坑也不少的,但 electron 的成功案例挺多,这个我用得最多。
    flutter 桌面开发,我只做过一些小项目,没遇到什么大坑,flutter app 有成功案例,桌面开发没听说。

    @Shazoo 用 QT 的话,项目是不是早结束了?开发不下去,被砍掉。。。
    ysc3839
        9
    ysc3839  
       2021-03-03 16:55:33 +08:00 via Android
    @csulyb 市场份额的话我没调查过,不太清楚。
    xing7673
        10
    xing7673  
       2021-03-03 16:58:48 +08:00 via iPhone
    目前观察到的直接选择 electron 吧,不选 flutter 主要是成熟应用把 flutter 当做插件用,纯 flutter 的还需要成功案例。
    Jirajine
        11
    Jirajine  
       2021-03-03 17:19:33 +08:00
    试试这个? https://tauri.studio/
    距离 stable 也不算远了。
    imkerberos
        12
    imkerberos  
       2021-03-03 18:00:20 +08:00   ❤️ 3
    Qt 有 20 多年的历史, N 多国外大型项目在用, 什么 AutoCAD, Maya 之类的. 你觉得呢?
    xcstream
        13
    xcstream  
       2021-03-03 18:15:17 +08:00
    现在趋势就是网页套壳
    MeteorCat
        14
    MeteorCat  
       2021-03-03 18:16:37 +08:00 via Android
    electron + nw,招人好招
    3dwelcome
        15
    3dwelcome  
       2021-03-03 18:20:32 +08:00
    看是不是项目完全自己开发,我个人倾向于游戏开发全平台那种 UI 。
    WEBVIEW UI 团队开发可以,一个人开发,JS 上也没什么太大的积累,个人感觉写起来没有 C++舒心。( JS 大佬除外,V2 应该有不少)
    GM
        16
    GM  
       2021-03-03 18:37:35 +08:00
    uno 可以考虑一下
    northisland
        17
    northisland  
       2021-03-03 18:41:01 +08:00
    qt
    northisland
        18
    northisland  
       2021-03-03 18:48:14 +08:00
    pyqt (qt) -> git-cola
    PyGObject (gtk) -> gnome meld

    很棒的开源软件,ubuntu apt 直接安装
    yitingbai
        19
    yitingbai  
       2021-03-03 21:55:22 +08:00
    这 4 个中, Qt 内存占用最低, 比其他 3 个小好几倍, 安装包体积最小,性能高, 但是上手难. 我推荐 javafx 开发桌面端, 不过百度网盘这种, 不需要和系统 api 交互, 类 web 端就好了, electron 应该最适合你的需求
    imn1
        20
    imn1  
       2021-03-03 22:08:30 +08:00
    Qt 只是没有中文手册,国内相对少,国外用的人很多,文章、例子也多
    westoy
        21
    westoy  
       2021-03-03 22:09:09 +08:00
    @imkerberos
    @xcstream

    其实中古时代就流行网页套壳了


    出 ActivePerl 和 ActivePython 的 ActiveState 家的 komodo edit/IDE 就是基于 mozilla 的 xulrunner 的, 比 atom 、vscode 早了七八年

    也有不少人就是直接套个 qtwebview 直接上的
    kylix
        22
    kylix  
       2021-03-03 22:22:22 +08:00
    lazarus

    ^o^
    loginbygoogle
        23
    loginbygoogle  
       2021-03-03 22:40:11 +08:00
    如果是商业应用,electron 分分钟给你破解,有 win32 或 Swift 基础,可以直接 Flutter
    wzzzx
        24
    wzzzx  
       2021-03-03 22:49:54 +08:00
    Qt,用 QML 开发分分钟的事
    ericls
        25
    ericls  
       2021-03-03 22:51:15 +08:00 via iPhone
    unity
    html
    LarryWang
        26
    LarryWang  
       2021-03-03 22:55:04 +08:00
    无远+ electron
    hnbcinfo
        27
    hnbcinfo  
       2021-03-03 23:59:59 +08:00
    xaml+C#

    前几天试过,用 Xamarin 写一套界面,可以轻松打包成 pc 和 Android 、iOS 的程序,不过在写界面的时候稍微麻烦,毕竟要兼容多平台。和传统的 wpf 有些区别。

    https://docs.microsoft.com/zh-cn/xamarin/
    weimo383
        28
    weimo383  
       2021-03-04 00:47:24 +08:00 via Android
    @loginbygoogle 怎么破解?它就一个 exe
    levelworm
        29
    levelworm  
       2021-03-04 02:00:25 +08:00 via Android
    习惯 MFC 的话估计是 C++?那上手 QT 应该不难。甚至可以先用 PyQT 做个原型出来看看。
    noqwerty
        30
    noqwerty  
       2021-03-04 05:02:17 +08:00 via Android   ❤️ 1
    看完这个帖没多久就刷到了 Flutter 2 的消息,放在这供大家参考吧: https://developers.googleblog.com/2021/03/announcing-flutter-2.html
    KaoN
        31
    KaoN  
       2021-03-04 07:22:04 +08:00 via Android
    qt 问题不大,虽然最近社区和 qtc 意见分歧很大,qt5 还是可以用的
    NewTab12138
        32
    NewTab12138  
       2021-03-04 07:51:30 +08:00 via iPhone
    桌面端用 electron,移动端用 flutter, 这是最佳答案
    murmur
        33
    murmur  
       2021-03-04 08:07:04 +08:00
    flutter 是给 native 程序员用的,不是给前端用的,而且这东西的 web 和 windows 版看看就行了
    几千个 issue 叫最佳解决?真敢吹啊
    dingwen07
        34
    dingwen07  
       2021-03-04 08:12:51 +08:00 via iPhone
    Qt
    supermoonie
        35
    supermoonie  
       2021-03-04 08:20:00 +08:00 via iPhone
    最近在使用 jcef 开发跨平台的桌面应用,有兴趣的话,可以发你链接
    yolee599
        36
    yolee599  
       2021-03-04 08:22:50 +08:00 via Android
    WPS 就是 Qt 做的,挺不错的,但是 Qt5 之后走商业路线了
    yingzir
        37
    yingzir  
       2021-03-04 08:24:36 +08:00   ❤️ 1
    没有人提 uno 吗? https://platform.uno c# 开发,比较成熟了
    AndyAO
        38
    AndyAO  
       2021-03-04 08:24:47 +08:00   ❤️ 1
    .NET(MAUI) 和 Java(skija) 的新方案需要等,所以指望不上了。

    目前 JVM 上有 JavaFX,C#上有 Xamarin 可以用。

    当然,如果不嫌老,Swing 也行。
    diyisoft
        39
    diyisoft  
       2021-03-04 08:28:26 +08:00
    弱弱的推荐一下 Delphi 最新版本 :)
    AndyAO
        40
    AndyAO  
       2021-03-04 08:28:39 +08:00
    楼上说的 uno 刚刚听说,Windows 用 UWP,而跨平台用 Xamarin 和 WebAssembly 。

    The Story About .NET Cross Platform UI Frameworks – The Half-Blood Programmer – Stories from Lex Li on technologies.

    https://blog.lextudio.com/the-story-about-net-cross-platform-ui-frameworks-dd4a9433d0ea?gi=ed6c9cc36c51
    sarlanori
        41
    sarlanori  
       2021-03-04 08:35:18 +08:00 via Android
    qt 除了开发效率低一点,其他挺好的,大型项目还是推荐用 qt,项目不大的话都可以吧
    bthulu
        42
    bthulu  
       2021-03-04 08:52:32 +08:00
    unity 没人用么, 这个也能跨平台的, 招人也容易
    murmur
        43
    murmur  
       2021-03-04 08:55:20 +08:00
    @bthulu unity 没见过开发 app 的啊,都是做游戏
    missdeer
        44
    missdeer  
       2021-03-04 09:21:05 +08:00
    Qt 在 C++ GUI 框架中开发效率绝对算高的
    XIVN1987
        45
    XIVN1987  
       2021-03-04 09:24:53 +08:00
    qt 跨平台、性能好、功能丰富,,久经考验,值得信赖

    不过 C++学习、使用难度较大,,建议试试 PyQt 、PySide
    zuosiruan
        46
    zuosiruan  
       2021-03-04 09:28:21 +08:00
    @bthulu 哈哈 这。。。。
    janxin
        47
    janxin  
       2021-03-04 09:48:45 +08:00
    取决于你的开发能力啊,你的开发了解或者熟悉 Qt 那就上 Qt,没必要再去踩 Electron 的坑

    如果都不熟,要看你对功能需求,很多程序对本地功能需求不大的前提下,Electron 是一个很好的选择。

    看你的需求,百度网盘这种就算,界面与功能交互不复杂,下载进程其实就走独立的本地进程即可。
    smilenceX
        48
    smilenceX  
       2021-03-04 10:05:12 +08:00
    看你熟悉的技术栈吧。
    我个人是不太喜欢 Electron 开发出来的程序,可能是因为我电脑配置不好,跑起来总觉得有点重。
    .net+wpf 不行,但是.net 有一些跨平台的库,比如前面有人提到的 uno 。 今年年底的.net 6 也会自带 maui 。
    我对 java 做 UI 了解不多,不评论了
    sssooonnnggg
        49
    sssooonnnggg  
       2021-03-04 10:12:59 +08:00
    考虑下 imgui ?
    nicevar
        50
    nicevar  
       2021-03-04 10:23:36 +08:00
    看你是做项目玩还是用了,如果是用肯定选择成熟的框架,那 Qt 就是最好的选择,毕竟 Qt 开发的软件几乎每个人的电脑上都有,游戏平台一堆都是 Qt 开发的,还有各类行业软件,反正我随便搜了一下电脑里有几十个,我的电脑里四个游戏平台,还有 AMD 的驱动管理、金士顿 SSD 管理软件、企业微信、AutoCAD 、抓包的 wireshark 、音乐的 MusicCore 和 GuitarPro 、IDE 的 HBuilderX,太多了。
    chinvo
        51
    chinvo  
       2021-03-04 10:28:22 +08:00
    .Net 需要配合 Avalonia UI 才能跨平台

    用 Xamarin 的话勉强算跨平台(共用核心库, 各平台分别建 UI 工程)

    C++ 和 QT 用起来也不错

    后排提示, 跨平台扯着蛋
    Torpedo
        52
    Torpedo  
       2021-03-04 10:28:32 +08:00
    这么多推荐 flutter 的,想问下桌面端 flutter 有什么案例吗?
    paoqi2048
        53
    paoqi2048  
       2021-03-04 10:29:23 +08:00
    看你之前用的 MFC,那就 Qt 吧
    newmlp
        54
    newmlp  
       2021-03-04 10:31:11 +08:00
    Qt,久经考验
    crazytree
        55
    crazytree  
       2021-03-04 10:38:49 +08:00
    需要设计可以联系我:P
    TomVista
        56
    TomVista  
       2021-03-04 10:58:24 +08:00
    出产品当然 qt,electron,别的都是玩具
    shunia
        57
    shunia  
       2021-03-04 11:04:19 +08:00
    @noqwerty #30 应该是最新的稳定版发布后就计划好的,我感觉说是 2,其实主要就是网页平台基本 production-ready 了
    shunia
        58
    shunia  
       2021-03-04 11:06:56 +08:00
    @bthulu #42 Unity 因为是渲染引擎所以做 App 是挺耗性能的,很少有人选择。
    @murmur 游戏工具有用 Unity 做桌面端的,比如: https://www.fairygui.com/ 这个 UI 工具就是用 Unity 开发的跨操作系统的桌面端。
    loginbygoogle
        59
    loginbygoogle  
       2021-03-04 11:12:03 +08:00 via iPhone
    @weimo383 反编译太容易,被动开源不可取
    charlie21
        60
    charlie21  
       2021-03-04 11:22:17 +08:00
    kongziming
        61
    kongziming  
       2021-03-04 12:00:35 +08:00
    Qt,使用过 MFC 的话,用起 Qt 简单易上手
    darknoll
        62
    darknoll  
       2021-03-04 12:11:39 +08:00
    @TomVista 没玩过 CEF ?
    buzailianxi
        63
    buzailianxi  
       2021-03-04 12:14:51 +08:00
    qt
    g00001
        64
    g00001  
       2021-03-04 12:27:43 +08:00
    其实前端网页能共用就行了,没有必要底层一定要跨平台,这样避免不必要的给自己挖坑。
    ELectron 其实不如微软 Edge 的 WebView ( Chromium 内核) 轻量简洁。

    aardio 里调用 WebView 的例子,生成的 EXE 文件打包就几百 KB

    import win.ui;
    var winform = win.form(text="Edge 浏览器控件 - web.view";right=759;bottom=469;bgcolor=16777215)

    import web.view;
    var wb = web.view(winform);

    wb.export({
    alert = function(msg){
    winform.msgbox(msg);
    return 123;
    }
    nativeLog = function(msg){
    winform.msgbox(msg);
    }
    })

    wb.html = /**
    <script type="text/javascript">
    alert("test").then( v=>nativeLog(v))
    </script>
    **/

    winform.show();
    win.loopMessage();
    littlewing
        65
    littlewing  
       2021-03-04 12:51:38 +08:00 via iPhone
    electron 感觉很耗资源,不流畅
    BernieDu
        66
    BernieDu  
       2021-03-04 12:59:33 +08:00
    跨平台 UI 库还没黄啊。。android 和 iOS 本身就不应该共用一套设计,so stupid,外加原生开发体验很爽性能很高。没错,我是原生派
    QBugHunter
        67
    QBugHunter  
       2021-03-04 13:18:42 +08:00   ❤️ 1
    Qt 最优选,但如果选择 Qt 的话招人是个问题,搞 C++的工资要求都不低(不算我)
    Electron,不适合高性能产品,如果没有对性能上的追求,Electron 也是个好的选择
    fgodt
        68
    fgodt  
       2021-03-04 13:34:01 +08:00
    qt,electron 其他都不靠谱
    TomVista
        69
    TomVista  
       2021-03-04 14:05:13 +08:00
    @darknoll 没有
    lonewolfakela
        70
    lonewolfakela  
       2021-03-04 14:15:00 +08:00
    其实弄个 wine 也不是不可以……
    SenLief
        71
    SenLief  
       2021-03-04 14:18:57 +08:00
    qt 在跨平台上更友好,如果不在乎包大小,那无疑 electron 更方便。
    piaochen0
        72
    piaochen0  
       2021-03-04 14:23:01 +08:00
    @murmur 我们之前用 unity 做过 app,就是考虑跨平台,各种坑,包也特别大,很多东西也没解决方案。慎用...
    ACodelover
        73
    ACodelover  
       2021-03-04 14:51:23 +08:00
    GTK,最近刚发布了 GTK4
    Lemeng
        74
    Lemeng  
       2021-03-04 14:57:58 +08:00
    QT,容易,好上手
    Otho
        75
    Otho  
       2021-03-04 15:13:09 +08:00
    推荐 Qt ,qt5 完整的做过一个跨平台的网盘项目,系统差异大的需要自己处理一下,github 上多找找也有不少开源库。就是资料少一点儿,需要自己慢慢找。
    nutting
        76
    nutting  
       2021-03-04 15:13:14 +08:00
    知乎上的轮子哥搞了一个 ui 组件,你问问
    AmiKara
        77
    AmiKara  
       2021-03-04 15:46:55 +08:00
    不管选什么最后开发还是与开发能力有关,electron 确实有很多坑,但也有类似于 vsc 这种非常优秀的产品,还是得看个人的技术栈或学习能力。
    csulyb
        78
    csulyb  
    OP
       2021-03-04 15:52:03 +08:00
    @Otho #75 能说啥有哪些坑吗
    nerocc
        79
    nerocc  
       2021-03-04 16:23:55 +08:00 via Android
    真的需要发布包小的话,不要等框架,自己找一个类似于 WebWindow 这种的做前端,然后后端用一个自己懂得的高效率语言写一个,然后自己想办法打包起来。

    SteveSandersonMS/WebWindow
    yunyuyuan
        80
    yunyuyuan  
       2021-03-04 16:33:18 +08:00
    PyQt,写起来挺快,运行也不错
    wangxiaoaer
        81
    wangxiaoaer  
       2021-03-04 16:40:44 +08:00
    @Torpedo #52 同问,先找个 demo 运行下看看都找不到
    thtznet
        82
    thtznet  
       2021-03-04 17:10:17 +08:00
    MAUI,马上出正式版了
    ragnaroks
        83
    ragnaroks  
       2021-03-05 09:30:39 +08:00
    现在稳定的只有 QT,或许可以等 MAUI,其它的都是自娱自乐
    Otho
        84
    Otho  
       2021-03-05 10:28:27 +08:00
    @csulyb Qt 的坑说起来挺多,但是我在开发过程中基本遇到的都能有可以使用原生的解决办法。与 js 交互有点麻烦,WebEngine 需要 js 单独支持,文件系统有差异需要使用原生方法解决,网络库不是很好用,建议使用开源的库,比如 Google 的。再有就是打包方面的问题了: Windows 的资料比较多,Mac 和 Linux 的较少,Linux 的看你需求使用官方的也能行,我用的一个开源解决方案 https://github.com/probonopd/linuxdeployqt 。Mac 的可以看一下论坛里的帖子 ,我的博客中也有一些总结,比较简单,可以参考一下 https://blog.msmk.live/
    csulyb
        85
    csulyb  
    OP
       2021-03-05 11:22:50 +08:00
    @Otho #84 多谢分享
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:02 · PVG 17:02 · LAX 01:02 · JFK 04:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.