当前位置 博文首页 > 藏经阁:学习C++ Qt/MFC客户端开发还有前途吗?本文给你答案

    藏经阁:学习C++ Qt/MFC客户端开发还有前途吗?本文给你答案

    作者:[db:作者] 时间:2021-07-26 12:04

    ??C++ 客户端开发在2010年之前应该还是挺流行的,自从移动端,web兴起之后,PC客户端开发就逐渐走下坡路了,甚至很多语言、框架都消失了,退出了企业的招聘舞台,像VB就是鲜明的例子。大部分公司都走向了移动,web,小程序的热潮,C++ Qt/MFC客户端开发岗位逐渐减少,但并没有消失。
    ??本文主要回答标题的问题,C++ Qt/MFC客户端开发还有前途吗?我的答案是:PC客户端开发仍然有前途,任然有岗位需求。
    ??下面我就慢慢给大家讲解分析。

    一 客户端应用领域

    1 商业软件

    ??由于电脑办公的便利以及其它特点,从目前的PC客户端来看,一些大小厂仍然有pc端项目,例如:
    ??金山:WPS项目,这是Qt/QML的集大成开发,应该是国内Qt用的最好的公司,而且还有很多社招岗位,但是想进去应该有不小的难度,很多985/211的不屑与做这种客户端项目,更不屑与做Qt开发,大部分都做AI、算法、java、 python之类的岗位了。普通一本、二本、专科的就有一定的机会进入该项目组,但是你得技术过硬,想混过去是不可能的。
    ??斗鱼:斗鱼直播的PC客户端是Qt开发的,当然你得会一些音视频知识,OBS得用用,源码找点时间去调试一把。
    ??中望CAD: 为了跨平台,Qt是很好的选择
    ??优酷:PC端优酷界面是Qt/QML开发的
    ??爱奇艺:这个界面可能是DuiLib做的
    ??字节跳动:飞书,剪映,都有Qt/QML的参与
    ??腾讯:腾讯会议ImGUI,腾讯视频DirectUI
    ??万兴科技:万兴喵影,完全就是用Qt开发的,视频剪辑的小霸王,可以对标会声会影等名声较大的软件。
    ??大部分的视频监控客户端、视频剪辑、播放器等客户端工具,以及中小型公司的项目,仍然会选择Qt作为界面开发首选,还可以跨平台,移植到linux, deepin, UOS,mac等。

    2 嵌入式

    ??在嵌入式领域,Qt作为界面开发利器,是不二选择。

    3 工控领域

    ?? 在招聘网站上,大家可以去看看,一些工控软件,医疗软件,CAD软件,也会选择Qt最为界面框架。

    4 游戏

    ??PC游戏可以说是客户端开发最为成熟和吸金的地方,当然也有很多游戏框架,cocos2dx, unity3d, unreal等,或者直接用Qt, MFC等原生框架直接写。

    5 金融交易平台

    ??为了高稳定性,用C++界面库来写交易平台应该没什么争议。

    二 其它C++界面框架

    ??C++除了Qt, 还有其它界面框架,例如MFC, DuiLib, Soui, ImGUI, 各种DirectUI等。

    MFC

    ??例如,福昕PDF用的是MFC, 当然,他们应该有借用BCG, 这种界面不太复杂,相对于视频客户端,没有花里胡啥的动画切换操作,用MFC可以解决。但是现在新项目用MFC是在太少了,难用,也没有多少人愿意使用MFC.
    ??那么MFC还需要学习吗,如果公司的老项目还在用,你得去学学,网上的教程也挺多,一般界面部分应该不会改动的太多,业务逻辑可能要改。如果没有这种项目,那么就别学MFC了,基本很少会用得到。

    ImGUI

    ??腾讯会议用的是ImGUI, 大家有兴趣可以去github找找ImGUI体验一下,这个可以跨平台,有OpenGL和DX两种渲染方式, ImGUI对高分屏的支持也很好,不用程序员去处理,像Qt, MFC这种,对高分屏还得自己用矢量图,改变控件大小的方式去自适应4K, 2K屏幕。

    SOUI

    ??Soui在一些小众软件中也有不小的应用,但是不能跨平台,很遗憾,soui的前身是金山带出来,具体历史我也不清楚。

    DuiLib

    ??DuiLib的应用应该还是挺广的,微信,钉钉等项目都有用到,可以自己魔改UI,开源免费,但是不幸的是也不能跨平台。

    三、微软C# .Net

    ??相对于C++,在windows上开发客户端应用,个人最推荐的还是C#技术栈,winform和WPF, 最好的还是WPF, 只要微软不倒,C#还有用武之地,毕竟C# .Net可以前后端通吃。
    ?? 用winform和WPF开发桌面应用,可以只用C#,还可以用C/C++来参与,核心功能可以让C/C++来做,封装成SDK供C#调用,避免了反编译源码泄漏的风险。
    ??用WPF可以不用担心高分屏带来的界面控件适配问题,相比于MFC, DuiLib,Soui等方便很多,而且C#是写起来最舒服的语言。
    ??如果不考虑跨平台,相信很多公司还是很愿意采用C#来写客户端,开发便利快捷。

    四 前端PC界面框架

    ??PC端软件除了用C++/C#,还可以用web前端的技术来实现,例如Vue, electron这种,套壳打包成exe应用,开发效率也是不错的。但是如何涉及到一些和C++交互的问题,那就麻烦了,当然用node.js还是可以解决的,只是开发人员需要多学习一些技术,企业的招聘要求略高。如果只是一些企业级的增删改查应用,用Vue或electron进行还是很不错的。

    五、客户端开发需要学习哪些技术

    ??如果想从事客户端开发岗位,光学习界面库Qt, MFC等,显然是不行的,这是C++前端和web前端的区别。web前端开发人员只需要掌握html、css,、js、vue、react等框架,堆好界面,和后端接口交互,增删改查等,那么基本就可以搞完一个项目。那么C++前端(客户端)开发者该学习哪些技术呢?
    ??客户端,主要是显示,界面交互,例如数值。图形,视频,图表,曲线的显示等。
    ??数据从哪里来?硬件设备,网络,数据库,其它程序;如果是从硬件设备,那么需要学习对应的通讯协议;如果是网络,那么基本的网络编程是必不可少的tcp, udp, rtmp, https等;如果数据库,那么和数据的交互你得会吧,数据库连接,curd等;如果是其它程序,多线程,多进程这种得知道的;还有就是后台http接口,libcurl之类的技术得清楚。
    ??图形的显示,如果是三维图形,点云数据等,那么需要的专业知识还是挺多的,OpenGL, OPenCV, PCL等,在下也没做过类似的项目。
    ??如果显示视频,声音,基本的音视频常识得知道的吧。
    ??可见作为一个合格的C++客户端开发,不是简单的会C++/Qt/MFC就可以,会涉及到很多领域,在求职就业时,选择自己感兴趣的,一直深挖,同时,其它技术也得学学,防止内卷。
    ??以上是界面显示的内容,关于客户端开发,还有很多,就说Qt的跨平台,在windows, mac, linux想做到一码多用,界面的适配也是不小的工作量,涉及到重型应用,还得有GPU相关的开发,例如cuda, dx等。

    六、关于Qt等框架跨平台的一点看法

    ??Qt可以跨平台,这是大家都知道,但是真正做时你才会发现,各个项目的需求不同,Qt解决不了一切,在windows和mac端有很大的区别,有时一个项目可能要开两套代码,在windows平台,各种GUI技术走起来问题不大,但是Mac平台,用swift、electron可能更方便,有时很多功能只有oc、swift接口,你C++/Qt参合进来难免尴尬,C++可以和oc, swift交互,但是原生的交互会更方便,而且实现的特效更切合macOS。在linux平台Qt问题不大。
    ??前端技术目前跨平台不是问题,vue + nw.js、electron、flutter等基本可以做很多应用,只要不是太多的需要和操作系统交互、音视频图形图像等;C++在界面开发跨平台基本没啥用武之地了,C++主要还是用来写核心功能,写服务器等。

    七、总结

    ??吾生有涯,而学无涯。
    ??只要PC还在,客户端开发仍有岗位,只是没有web, 移动端开发,后台那么多岗位。

    cs