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

windows 桌面应用开发技术选择, C#/Qt/C++/?

  •  
  •   gaoyadianta · 2018-04-12 16:57:21 +08:00 · 26114 次点击
    这是一个创建于 2416 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近需要开发个比较简单的 windows 桌面应用程序,之前是做嵌入式开发的对 c 比较熟悉,其他语言都不是很了解(包括 c++)。 麻烦大家推荐下用哪种技术开发比较合适呢?主要考虑上手出活要快一些,学了相关技术之后将来能在别的地方用的上就更好 不仅限于上面提到的,觉得好的都帮忙推荐下吧

    另外目前需要做的就是个配置用的工具软件,会用到串口,去和硬件设备通信

    第 1 条附言  ·  2018-04-13 14:06:46 +08:00
    总结了下各位的建议,按照大家建议的频次来排序吧(意识流,没仔细数):
    C#+wpf/winform/CEF
    Qt
    pyqt
    delphi
    html+JS
    Lazarus
    java 9 with jlink / electron
    avaloniaUI
    aardio
    LabVIEW

    也供大家参考吧,我准备用 C#+winform 先搞一下
    第 2 条附言  ·  2018-04-13 14:07:17 +08:00
    易语言
    go
    87 条回复    2021-08-11 01:50:22 +08:00
    gaoyadianta
        1
    gaoyadianta  
    OP
       2018-04-12 17:02:33 +08:00
    请大家帮帮忙,或者推荐下哪个节点比较合适问这个问题
    Akkariin
        2
    Akkariin  
       2018-04-12 17:04:09 +08:00
    c# +winform
    am241
        3
    am241  
       2018-04-12 17:05:29 +08:00 via Android
    c#,省事
    gaoyadianta
        4
    gaoyadianta  
    OP
       2018-04-12 17:06:12 +08:00
    @Akkariin
    @am241
    二位意见一致,看来 C#挺不错的,谢谢
    gaoyadianta
        5
    gaoyadianta  
    OP
       2018-04-12 17:06:51 +08:00
    @Akkariin
    @am241 有没有推荐的教程之类的
    plqws
        6
    plqws  
       2018-04-12 17:16:09 +08:00
    @gaoyadianta 微软官方的 MSDN 是最好的教程
    Droi
        7
    Droi  
       2018-04-12 17:16:48 +08:00
    也可以试试 QT,程序也方便做到开发板里。看自带的文档就够用了。
    https://download.qt.io/archive/qt/
    jasonyang9
        8
    jasonyang9  
       2018-04-12 17:17:07 +08:00
    在下觉得这块已经凉了。。。
    wackyjazz1
        9
    wackyjazz1  
       2018-04-12 17:19:01 +08:00
    C# + winform,要畫面好看一點再配個 DevExpress
    GGYB
        10
    GGYB  
       2018-04-12 17:21:35 +08:00
    c# + wpf 吧。mvvm 的思想,前端也能复用。
    shijingshijing
        11
    shijingshijing  
       2018-04-12 17:22:20 +08:00 via iPhone   ❤️ 1
    准备深入而且本身技能树是走嵌入式的话推荐 Qt,以后下位机,触控屏都可以接着用 Qt,还自带跨平台属性加成。就是 C++要求高,后续维护要找个水平好的才能接上手。

    如果不准备深入或者只是做个简单的界面,那果断 c#+winform,拖控件不要太爽,而且以后找新人接受也行。
    MinQ
        12
    MinQ  
       2018-04-12 17:45:18 +08:00 via Android
    C#+WPF/Winform 或者 pyqt 吧,C++写 QT 没两把刷子 hold 不住的
    doubleflower
        13
    doubleflower  
       2018-04-12 17:52:02 +08:00
    HTML + JS,出活快,不过上手比 C#慢

    C#没公司用,学精了也找不到工作的,而前端技术好找
    sgissb1
        14
    sgissb1  
       2018-04-12 17:53:19 +08:00
    你提到的所有语言都可以。

    但是易语言更简单,主要是招人方面都会比 c 类语言好弄得多。
    cdfmr
        15
    cdfmr  
       2018-04-12 18:00:38 +08:00
    会 Pascal 的话,其实 Lazarus 很不错。
    fgodt
        16
    fgodt  
       2018-04-12 18:03:47 +08:00
    wpf c# 最轻松的
    8023
        17
    8023  
       2018-04-12 18:04:13 +08:00 via Android
    qt,相当顺手,也方便后期移植。
    若确定将来不打算运行在除 win 的平台,c# WinForm 也可以。
    WildCat
        18
    WildCat  
       2018-04-12 18:04:50 +08:00 via iPhone
    java 9 with jlink / electron
    visonme
        19
    visonme  
       2018-04-12 18:05:32 +08:00
    window 下我还是推荐 C#,用 winform 还是 wpf 看要做的东西对界面的要求有多高了。
    如果熟悉 QT 也不错,用 QML 做界面比用 widget 好很多了
    gaoyadianta
        20
    gaoyadianta  
    OP
       2018-04-12 18:13:41 +08:00
    谢谢大家的回复,看来最简便的方式还是 C#
    我本身做嵌入式的,Qt 也是可选项
    yejinmo
        21
    yejinmo  
       2018-04-12 18:13:44 +08:00
    必然 C# 啊
    gaoyadianta
        22
    gaoyadianta  
    OP
       2018-04-12 18:14:07 +08:00
    @visonme winform 和 wpf 哪个复杂些,对界面要求不高
    huiyifyj
        23
    huiyifyj  
       2018-04-12 18:15:27 +08:00
    首选 C#+winFrom,然后就是 C++和 Qt 搭配啊。
    XinLake
        24
    XinLake  
       2018-04-12 18:18:01 +08:00
    现在的 windows 桌面主要是 NET。QT wxWidget GTK 那些也行,优势是跨平台不依赖操作系统组件,不过要玩得转要点内功,刚接触就算了。

    NET 微软推荐 C#,WPF 是比较现代,WinForm 很早就有了。

    底层硬件通讯方面,你需要用创建一个 VC++ Win32 (支持 64 位) DLL 工程来支持串口通讯功能,代码用 C 语言开发。C# 程序可以调用 DLL 来完成从 UI 到底层硬件通讯得任务,但是其中会有很多细节,微软官方文档一般都能找到有帮助得信息。
    shijingshijing
        25
    shijingshijing  
       2018-04-12 18:20:37 +08:00
    @gaoyadianta Winform 简单,都是标准预制件,做做槛控界面足够了。WPF 适合非标准界面,各种花里胡哨的界面只能选择 WPF。
    shijingshijing
        26
    shijingshijing  
       2018-04-12 18:22:37 +08:00   ❤️ 1
    @XinLake 不需要整 dll 这么复杂, .Net framework 从 2.0 就自带了串口 SerialPort 类,命名空间 System.IO.Ports,配合 MSDN 分分钟上手,微软的全家桶就是这么爽。
    gaoyadianta
        27
    gaoyadianta  
    OP
       2018-04-12 18:23:02 +08:00
    @shijingshijing 好的,基本清楚了
    @XinLake C#做串口通信这么复杂呢啊
    happinessnch
        28
    happinessnch  
       2018-04-12 18:24:42 +08:00
    C# + CEF
    gaoyadianta
        29
    gaoyadianta  
    OP
       2018-04-12 18:30:30 +08:00
    @happinessnch CEF 是什么
    TaylorJack123
        30
    TaylorJack123  
       2018-04-12 18:35:07 +08:00 via Android
    做过嵌入式开发的强烈推荐 QT,参照官方的例程,一天就能搞定一个简单的 App😁
    ioth
        31
    ioth  
       2018-04-12 18:39:35 +08:00
    delphi 7
    vb6
    XinLake
        32
    XinLake  
       2018-04-12 18:50:11 +08:00 via Android
    @shijingshijing
    @gaoyadianta
    我把 .net 的串口给忘了,.net 也行还方便。
    owenliang
        33
    owenliang  
       2018-04-12 18:53:07 +08:00
    QT 拖一拖吧
    youthdou
        34
    youthdou  
       2018-04-12 19:10:27 +08:00
    qt 适合跨平台 尤其对嵌入式。
    ysc3839
        35
    ysc3839  
       2018-04-12 19:17:07 +08:00 via Android
    @sgissb1 强烈不推荐易语言。
    首先是要收费,500 起步的价格。
    其次是无法版本管理,代码是私有二进制格式的。
    再者是本身的功能不足,比如不支持 Unicode。
    ysc3839
        36
    ysc3839  
       2018-04-12 19:18:19 +08:00 via Android
    @gaoyadianta Chromium Embedded Framework
    yazoox
        37
    yazoox  
       2018-04-12 19:24:37 +08:00 via Android
    @MinQ 不是吧,qt 有这么可怕啊……
    MinQ
        38
    MinQ  
       2018-04-12 19:31:30 +08:00 via Android
    @yazoox 不是可怕,而是 C++下面的 QT 不够简洁所以略麻烦,再加上 C++不是纯面向对象的,新手直接干有可能忘了自己回收内存 /搞出了野指针之类的,导致遇到奇奇怪怪的问题
    MinQ
        39
    MinQ  
       2018-04-12 19:32:44 +08:00 via Android
    @ysc3839 这玩意跑起来就跟开了个 chrome 一样,眼看着 CPU 占用率和内存占用哗哗往上涨啊
    justinwu
        40
    justinwu  
       2018-04-12 19:40:04 +08:00 via iPhone
    C# + winform,不二之选。

    曾经嵌入式多年的我,就是用这开发的串口工具,同事都说好用。

    OO 基础以及基本的 GUI 套路,都是通用的。
    zhfsxtx
        41
    zhfsxtx  
       2018-04-12 19:40:53 +08:00
    PythonAnswer
        42
    PythonAnswer  
       2018-04-12 20:05:10 +08:00 via Android
    喜欢干小活用 python 然后随便加个 ui
    ftexplore
        43
    ftexplore  
       2018-04-12 20:07:19 +08:00
    现在做新的桌面软件基本都是,用 HTML 做 UI,例如微软的 vscode
    alqaz
        44
    alqaz  
       2018-04-12 20:37:54 +08:00
    Qt
    omph
        45
    omph  
       2018-04-12 20:41:06 +08:00
    windows 当然用 winform,微软傻瓜化是出名的
    linux 当然用 qt
    imdong
        46
    imdong  
       2018-04-12 20:41:09 +08:00
    什么都不要说了,除非楼主自己业余小打小闹弄着玩可以试下搞一下易语言。
    否则任何条件下,都不建议使用易语言。

    当下 C#应该是比较主流的吧。
    jsq2627
        47
    jsq2627  
       2018-04-12 20:46:58 +08:00   ❤️ 4
    简单小工具:c# + winform
    界面复杂:c# + wpf
    只考虑 win10 平台:c# + uwp
    跨平台:html/js/electron
    跨平台大型 GUI 应用:qt
    baixiangcpp
        48
    baixiangcpp  
       2018-04-12 20:51:31 +08:00
    熟练使用 C++的情况下用 qt
    bookit
        49
    bookit  
       2018-04-12 20:51:55 +08:00
    这块早就凉了,

    所以最佳方案是下载一串口配置的开源代码改改就行
    defphilip
        50
    defphilip  
       2018-04-12 20:54:08 +08:00
    Qt
    aminic
        51
    aminic  
       2018-04-12 21:21:31 +08:00 via Android
    好上手体验舒服的也就 c# winform wpf
    iwtbauh
        52
    iwtbauh  
       2018-04-12 21:48:16 +08:00 via Android
    其实,GTK+ 也可以在 Windows 上跑
    fancymax
        53
    fancymax  
       2018-04-12 21:55:27 +08:00 via iPhone
    @cdfmr 比 delphi 差远了啊
    Linko
        54
    Linko  
       2018-04-12 22:10:07 +08:00
    C# + winform
    Wicked
        55
    Wicked  
       2018-04-12 23:04:31 +08:00 via iPhone
    推荐 Qt,跨平台,丰富的文档和教程,完备的功能支持
    XinLake
        56
    XinLake  
       2018-04-12 23:44:45 +08:00 via Android
    Qt、GTK 做单纯的 GUI 跨平台还行,像网站 APP 那样几乎就是个移动设备上的前端,只要 GUI 就好没啥功能,那样还行。

    要是涉及到 APP 能力,如视频解码、3D 图形、图像处理、机器视觉、本地 AI 计算,这时 APP 可能需要使用硬件计算能力,那还是操作系统本身的 APP 框架好点,和系统其他组件结合得更好,问题少,效率更高。
    cchange
        57
    cchange  
       2018-04-12 23:46:03 +08:00
    WPF 看起来真心不错 不知道是否有开源的实现,不太喜欢网页技术……
    MinQ
        58
    MinQ  
       2018-04-13 00:14:17 +08:00 via Android
    @cchange avaloniaUI,开源跨平台
    g00001
        59
    g00001  
       2018-04-13 01:19:42 +08:00   ❤️ 2
    用 aardio 简单,小、轻、快、调用 C 语言接口方便。


    像这种漂亮的界面,用 aardio 分分钟拖出来,生成的 EXE 才 1MB 多一点,用其他开发工具要搞到什么时候。

    至于串口,看 aardio 写的串口调试助手

    就是几句代码的事。
    ysc3839
        60
    ysc3839  
       2018-04-13 01:29:22 +08:00
    @MinQ 是的,但是仍然有很多软件使用。
    MinQ
        61
    MinQ  
       2018-04-13 06:53:30 +08:00 via Android
    @ysc3839 我自己就是受害者之一啊,以前写过一个触摸大屏软件,要处理地图信息,最后选了 WPF+CEF,在那个破工控机上跑的,经常怀疑人生
    KaoN
        62
    KaoN  
       2018-04-13 07:02:10 +08:00 via Android
    @XinLake Qt 做 3d 应该完全没问题
    hotsymbol
        63
    hotsymbol  
       2018-04-13 08:41:59 +08:00
    用 MFC+C#吧 坑不死你
    weizhen199
        64
    weizhen199  
       2018-04-13 09:10:54 +08:00
    这种东西还是 Qt 比较好。
    winform 有点过期了。
    wpf,破机器会卡
    ibugeek
        65
    ibugeek  
       2018-04-13 09:31:41 +08:00
    C#或 Qt,上手快得不行。
    mohoumk2
        66
    mohoumk2  
       2018-04-13 09:32:53 +08:00 via Android
    c#
    nicevar
        67
    nicevar  
       2018-04-13 09:38:46 +08:00
    熟悉 C++的用 Qt 最快最省事了,以后要用在其他平台上也方便,现在一般的工具我都用 Qt 写
    skadi
        68
    skadi  
       2018-04-13 09:42:59 +08:00
    qt
    lvsemi1
        69
    lvsemi1  
       2018-04-13 10:02:49 +08:00 via Android
    我说 unity3d 会不会被打
    hws8033856
        70
    hws8033856  
       2018-04-13 10:09:05 +08:00
    上面说 C#+CEF 以及 WPF 的明显都不适合楼主的技术栈和快速出活的需求,因为这两者都要求用标记语言(html;xaml)做前端
    macha
        71
    macha  
       2018-04-13 10:19:35 +08:00
    我感觉 C#的 winform 比较合适。界面分分钟拖出来。追求短平快 C++首先被排除。
    thuai
        72
    thuai  
       2018-04-13 11:21:51 +08:00
    Qt 如果会 Python 的话,就 PyQt。快的一逼
    timsensor
        73
    timsensor  
       2018-04-13 11:28:32 +08:00
    MS .net 部署可能会遇到问题。
    我推荐 QT,坑小
    yunji3344
        74
    yunji3344  
       2018-04-13 11:33:36 +08:00
    怎么说人说 delphi
    liuminghao233
        75
    liuminghao233  
       2018-04-13 11:57:43 +08:00 via iPhone
    不跨平台就 wpf
    要写一套放 mac win linux 就 qt

    其他不考虑
    MinQ
        76
    MinQ  
       2018-04-13 12:36:03 +08:00 via Android
    @liuminghao233 其实现在 WPF 也能跨平台了…… https://github.com/AvaloniaUI/Avalonia
    mercurygear
        77
    mercurygear  
       2018-04-13 12:37:16 +08:00
    WTL
    tamlok
        78
    tamlok  
       2018-04-13 12:49:12 +08:00 via Android
    @MinQ qt 有 qobject 管理,一般不会有野指针
    Narcissu5
        79
    Narcissu5  
       2018-04-13 12:55:01 +08:00
    WPF 和 WinForm 的最大不同在于 WPF 是使用显卡渲染的,WinForm 用的是系统控件。WPF 本来就是针对现代机器设计的,配置不好会卡是肯定的,反过来说,配置好的机器不用 WPF 就是浪费
    MinQ
        80
    MinQ  
       2018-04-13 13:00:41 +08:00 via Android
    @tamlok 我指的是你自己写功能代码的时候如果没踩过坑的话容易翻车
    g00001
        81
    g00001  
       2018-04-13 13:07:08 +08:00
    C#跟 Java 一样属于重型开发工具,如果是专业玩 C#准备投入三五年的全职时间可以玩,快速开发还是算了吧,C#写的软件需要.Net 运行库部署麻烦,另外 C#写的软件用反编译工具可以还原出全部的 C#源代码,连工程文件都可以还原出来。当然,如果不介意别人分享你的源代码,就没什么问题了。

    electron 有同样的问题,用 js 写的软件很难真正保护源代码.而且 electron 不支持 win7 sp1 以下系统,另外一个是发行体积大:

    MinQ
        82
    MinQ  
       2018-04-13 13:10:18 +08:00
    @g00001 核心代码封装成 C++的 DLL 或者加混淆,Java 也有同样的毛病,安卓的 APK 天天被人逆向来逆向去的,还不是一样是混淆或者塞 JNI 里
    Narwhal
        83
    Narwhal  
       2018-04-13 13:50:40 +08:00
    这个帖子里没人讨论 labview 么
    gaoyadianta
        84
    gaoyadianta  
    OP
       2018-04-13 13:59:03 +08:00
    @Narwhal 哈哈,其实我之前就是玩 labview 的,不过觉得那东西安装啥的还是麻烦了,以后想换一个
    Clarencep
        85
    Clarencep  
       2018-04-13 14:04:25 +08:00
    没有人说 go 语言吗?建议试用下 go,搭配 lxn/walk 库,C 语言用户肯定都喜欢 go 的。
    cchange
        86
    cchange  
       2018-04-14 22:02:58 +08:00 via iPhone
    @MinQ 多谢 希望这个库能一直发展下去
    aaniao002
        87
    aaniao002  
       2021-08-11 01:50:22 +08:00 via Android
    要快的话走 qt 线路,要定制要大众要跨平台走 html 线路,win 全家桶不建议,啊三味太浓。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2767 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 11:45 · PVG 19:45 · LAX 03:45 · JFK 06:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.