赞
踩
关注、星标公众号,直达精彩内容
来源:网络素材
整理:李肖遥
Qt不知道大家用的多不多,或者有没有很多相关的岗位,我看到这个热帖,整理了几个我人认为说的很有道理的回复,大家可以多多探讨交流
知乎作者:JasonWong编辑于 2016-12-05
用Qt已经4年了,我来说说感受。在我用Qt的这些年里,Qt一直处于不温不火的状态。有很多公司用,如YY、WPS这样用户过亿的产品,也有不对普通用户的军工、船舶。最近在汽车这块也比较火。但是Qt没有在被大规模的采用,往往是只有部分行业内Qt的使用率很高,这的确是事实。
Qt是我的主力开发框架,我拿Qt开发了客户端,服务器端,桌面端,移动端甚至还包括点嵌入式端。这这之中我遇到了很多Qt的不足以及Qt的强大。考虑到题目定义,在本回答中我主要讲不足。
0.互联网时代了,很多人已经答过这个,不展开了。
1.开发人员不足:这是我现在发现Qt这个生态系统里最大的问题。因为缺少开发人员,导致企业难以招到高质量的Qt工程师,然后不愿意展开Qt的项目,这简直就是恶性循环。我见过有公司因为担心招不到Qt工程师,直接把已经做好的产品雪藏,再用HTML5重新开发一遍。
2.工程师们对Qt认知普遍落后:直至今天,Qt从4.8开始推出的QML(QtQuick框架,计划是代替QtWidgets)仍然没在Qt圈子里普及,甚至很多人都不知道这是什么以及这个能干什么,这更别说其他工程师们了。
3.学习成本高:Qt有QtQuick,这个开发起来非常方便,但是这毕竟是新的框架,带来了新语言和新的开发模式,这意味着学习成本,很多人看到就望而止步,拒绝学习(没错,是拒绝学习),我本人也是在接触Qt两年后才慢慢接触这个框架。才发现这是好东西。退一步说,就算是只用QtWidgets,这也是C++,这个入门成本太高。套用我以前同学和我说的话:如果我学的是Web开发,我第一天就可以做出可视化的成果,用起来还不错。但是如果是C++,几个星期了说不定还是黑乎乎的控制台,学习的兴趣一下子就没了。
4.硬件要求高:我认为Qt的未来在于QtQuick,无论桌面、手机还是嵌入式。但是QtQuick对硬件要求很高(相对QtWidgets而言),没显卡,或者显驱不完善,不好意思,直接拜拜,跑不起来。很多公司因为这个,放弃了QtQuick,回到QtWidgets,去纠结那个C++到底适不适合开发界面的问题。甚至直接抛弃Qt。
5.太大:一个HelloWorld 10多MB,我觉得这个正常,毕竟Qt不是系统级别的库,但是很多人接受不了。另外Qt自己也出了lite计划,降低Qt的大小以及对硬件的依赖(一起解决我说的4、5两点),但是截止我编写本答案,该项目仍在开发中。
6.宣传力度低:举个例子,Qt以前就有一个虚拟键盘的组件,但是只给企业版,然后前段时间给开源了。但是我问过很多很多人,他们连有这个东西都不知道,仍然自己在造轮子。还有其他很多东西都是如此。其实这个来源的信息都是公布到官方的blog,但是是英文,很多人估计都不会去看一下。
7.授权协议:目前Qt是GPL和LGPL,这个就不用我详细解释了吧,动不动就要开源。除非买企业版解除这个限制,但是企业版又是一个大开销。其实啊,我还是挺喜欢Qt的,千万别说我在黑Qt。
知乎作者:懒得打字编辑于 2019-08-09
我们接触的大部分都是互联网应用,企业级应用,这些领域用Qt就是大炮打蚊子。
Qt面向的是什么?首先Qt的第一个吹牛逼的特性是跨平台,目前你能想到的操作系统平台它都能支持,虽然有部分平台支持的不是特别好,但是在比较流行的平台下,如Windows,Linux桌面端/服务端/嵌入式,都是支持非常不错的。BUG虽然有一些,但也算在解决方案内部绕过去的那种,致命的BUG不多。
Qt第二个特性是高效,基于C++的语言决定了使用它做GUI开发,一些辅助功能可以直接使用硬件特性,比如直接操作内存什么的,同时GUI绘制的时间也是可控的。所以一些嵌入式软件的人机交互界面基本上都用Qt实现比较合理(在资源本来就不行的情况下,跑个tomcat+浏览器简直不可能)。
Qt第三个特性是门槛低,这点有争议的,这里的门槛是和操作系统底层的GUI相关的API比较的,只有用过Win32 API,GTK+的才有发言权。那些十几个参数的API,想想都恐怖。
那么那些Qt火的领域为什么用Qt呢?那些Qt不火的领域为什么不用Qt呢?这个是典型的软件设计架构问题。我能用苍蝇拍子解决的问题,为什么用大炮呢?
先说Qt火的领域国内的电网领域:早期的(90年代)电网自动化软件都是国外的,菜一点的都是跑在NT4.0上的,高级一些的都跑在Solaris上的,然后国内开始仿制(那个时候已经WinXP了),一看国外的系统既可以跑在Win上,又可以跑在Unix上,Linux又开始慢慢流行。
你说那个时候的设计师选什么作为图形框架?首选Qt3啊,那个时候Java还不知道在哪里呢。现在国家电网南方电网又在推广国产操作系统,所有的生产控制系统都是基于Linux的国产操作系统,那些早期用MFC的,实时系统转Qt,非实时系统转Java。这个领域用了Qt的跨平台和门槛,毕竟那个时候的程序员能用好操作系统底层API的太少了。
汽车领域:大家看到的车机系统早期是WinCE的,非常卡,点一点反应一秒钟,后来逐步是Linux,然后是Android,反应快一点儿了。汽车仪表盘的实时性可比车机要高的多,早期的仪表盘都是指针+单色液晶,就是一个很简单的裸片子控制,连操作系统都不上,为了就是实时性。要是你已经加速到了120,但是仪表盘上还是60,那你不疯了。
现在的仪表盘要么是厂家自己定制的Linux,要么就是QNX,但是在图形框架上绝大多数用的是Qt,C++的特性保证了硬件性能实时掌握在程序员手上,要是瞄一眼仪表盘的时候,这个时候Java正好GC了……这不是都是利用了Qt的高效性质。
其他火的领域就不一一说了,比如视频监控,军工控制。
我们接触的比较多的领域是互联网和企业应用,那么为什么这些领域现在的不青睐Qt呢?首先跨平台,说跨平台貌似没有多少能比JVM做的更好的了,管你什么硬件平台,基本上都有能用的JVM版本,至少在跨平台上面Qt并没有绝对的优势;
其次是效率,这些应用很少那种批量数据处理解决大批量数据的问题,即使有,也可个作为核心模块,使用专门的技术解决(比如MapReduce等,这些领域通常硬件资源是无限的),更多的关注的是业务流程,所以基于C++的Qt并无太多优势;
然后是门槛,虽然Qt框架的门槛比直接使用操作系统API要低,但是比C/C++门槛低的高级语言多得是啊,部分Java框架在语言层次上和Qt比较简直毫无下限;
最后是,使用流行的Java,Python之类的能干的活,为什么要用C/C++的Qt呢?毕竟人家用Maven和Pip方便多了。
总之找不到使用Qt的理由。
地址:https://www.zhihu.com/question/53068823?sort=created
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
扫描下方微信,加作者微信进技术交流群,请先自我介绍喔。
推荐阅读:
- 嵌入式编程专辑Linux 学习专辑C/C++编程专辑
- Qt进阶学习专辑关注微信公众号『技术让梦想更伟大』,后台回复“m”查看更多内容。
- 长按前往图中包含的公众号关注
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。