一、吐槽总结

搞Qt开发十几年了,最初从Qt4.6开始,一直追新到现在的6.7版本,中间经历过无数的血的教训,简直是又爱又恨。其实Qt挺好的,但是还是要忍不住吐槽一下,本人还是希望Qt发展的越来越好,这样我的饭碗就能保住了。

1. 版本众多

  • Qt的版本多到你数都数不清,多到你开始怀疑人生。
  • Qt版本从4.6开始到6.8,光这一阶段就无数版本。
  • 编译器从msvc编译器到mingw编译器再到gcc编译器等。
  • 位数从32位到64位。
  • 操作系统有windows、linux、mac、android、ios等系统,还有各种嵌入式linux,现在又多了国产linux。
  • msvc版本还必须安装对应的 vs2005、vs2008、vs2010、vs2013、vs015、vs2017、vs2019、vs2022等。
  • mingw版本必须安装不小于某个版本号的mingw编译器。
  • 很多人一看官网的下载链接,就蒙圈了,到底应该选择哪一个进行下载开发呢?对初学者真不友好。
  • 为了能够做到开发跨平台应用,不得不安装多块硬盘和多个操作系统,虚拟机的坑使得必须安装真机环境才能测试出真实效果。
  • 最基本的你必须安装windows XP,WIN7 32位 64位,WIN10 32位 64位,ubuntu 14.04 15.04 16.04。
  • 嵌入式开发还得搞各种交叉编译环境,尤其记忆最深刻的是在2012年搭建交叉编译环境花了3周时间。
  • 搞Qt安卓开发最好用干净的系统, 本人试过N次,在原有的安装了很多东西的电脑上搭建Qt android开发环境死活不成功,必须全新安装的操作系统才可以,所以单独搞了一块硬盘用来Qt开发android。
  • 本人就在四块硬盘上安装了十几个操作系统,安装了至少30个Qt开发环境,我的乖乖。
  • 大概从2020年开始,Qt飙版本的速度,超过了各位工资的涨幅速度。

2. 各种乱码

  • Qt各种乱码问题,困扰Qter一生,尤其是Qt4时代;
  • 有时候解决了界面乱码,输出又出乱码了;
  • 解决了输出乱码,界面又乱码了;
  • 界面不乱码了,结果qdebug打印又乱码;
  • mingw不乱码了,结果msvc又乱码,关键是程序一模一样。
  • 乱码提示只有上帝能看懂,都是些火星文,非常坑爹;
  • 声明下:这不只是Qt的问题,这是IT界的问题,什么utf-8带BOM,什么MSVC默认是GBK编码,什么回车换行符\r\n。
  • 幸运的是,大概从Qt5以后,乱码问题少很多。

3. 接口变动

  • Qt最近十几年大概有3个大版本,分别是Qt4、Qt5、Qt6,按照目前飙版本的速度,预计不到2年还有个Qt7出生。
  • 版本接口变动最大的是Qt4到Qt5,其次是Qt5到Qt6,直觉告诉我,Qt6和Qt7接口变动不会很大,应该很小。
  • 接口变动是避免不了的事情,但是同一个函数的命名变来变去,这就有点接受不了。
  • Qt内置方法的变动,让一些喜欢追逐新版本Qt开发环境的Qter们抓耳挠腮,一下子toAscii,一下子就没了,一下子QSound在QtGUI,一下子移到了multimedia中。打印模块也是移来移去,其他的就不细数了。
  • 浏览器内核变来变去,以前webkit好好的,后面居然抛弃了,我勒个去,始乱终弃啊!你让以前依赖webkit内核的项目怎么换啊,改来改去的。
  • 大概从Qt5.6版本开始集成的是webengine谷歌内核,最起码有,也能接受,但是这逼不支持mingw编译器。而Qt默认自带编译器就是mingw,意味着默认就不能用浏览器控件。这下搞得,哎。
  • 高版本开发环境居然不兼容低版本,这可是犯了大忌啊。
  • 每一个巨大版本的变动,意味着学习成本上升。
  • 网上大量的Qt4和Qt5时代的代码,让很多Qt4时代的代码不能正常在Qt5环境中编译,导致网上各种初学者下载到的Qt4代码编译没有一个通过的人丧失信心,甚至又开始怀疑人生,网上都是骗人的又一次浮现脑海。
  • 对标c#和java,基本上都是很容易的升级大版本,因为接口几乎就是一致的。

4. 打包发布

  • Qt发布也困扰了不少的初学者,尤其是高达几十兆的运行库文件,更是崩溃至极。
  • 不是提示缺少某个文件,就是那边少了数据库插件,甚至蹦蹦蹦的弹框。
  • 最可恨可气无奈的是,明明某些电脑可以正常运行,某些电脑死活跑不成功。
  • 后面出了个deployqt工具要方便很多,以前没有这个工具的时候,简易一头雾水。
  • 有错误提示还好,关键是很多时候直接无法运行,啥提示都没有,只能慢慢查。
  • 对标c#程序,只需要安装个.NET框架就行,非常方便。

5. 兼容性

  • Qt就是因为兼容性好,所以最后做到了兼容性差。
  • 总的来说其实就是基础功能兼容性好,平台相关的一些特性兼容性差。
  • 最大吐槽就属于高分屏缩放的兼容性问题,到现在Qt6基本还没解决,看QtCreator本身的兼容性就知道。
  • qml兼容性巨坑,各种的不稳定,直到5.7版本开始才好点,很多老式电脑无法正常运行。
  • 在Qt6以前,那个qml设计器更是惨不忍睹无法直视,字体细小难看,还必须放大镜才能看清是什么,既然做了就做好点,不然怎么让开发者用呢?
  • qml开发的商业产品或者作品,到现在也没有看到几个好的,移动端的更加稀少。没有看到一个让人惊艳的作品。

6. 网友补充

  • 有时候debug正常,release又崩溃。可能是路径问题?
  • 集成开发环境QtCreator中文翻译不全,一会中文一会英文,看起来非常别扭。
  • 长期用Qt会产生严重的依赖症,什么都Qt给你封装好了。长此以往,变成Qt程序员而非C++程序员。
  • qml组件中很多控件是半成品,嵌套组件下Qml设计器很难用。
  • QtCreator在debug调试非常鸡肋,而且容易崩溃。

二、开源地址

  1. 国内站点:https://gitee.com/feiyangqingyun
  2. 国际站点:https://github.com/feiyangqingyun
  3. 个人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
  4. 视频主页:https://space.bilibili.com/687803542



Qt血的教训/细数Qt开发的各种坑/又爱又恨/欢迎围观留言评论的更多相关文章

  1. 细数Qt开发的各种坑(欢迎围观)

    1:Qt的版本多到你数都数不清,多到你开始怀疑人生.从4.6开始到5.8,从MSVC编译器到MINGW编译器,从32位到64位,从Windows到Linux到MAC.MSVC版本还必须安装对应的VS2 ...

  2. 【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识

    自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书写速度. 下面我们就来一起学习一下Cocos ...

  3. 细数php里的那些“坑”

    Part 1 Grammer 尽管PHP的语法已经很松散,写起来很“爽”.但是对于学过 Java 的“完全面向对象程序员“来说,PHP程序设计语言里,还是有一些的坑的.下面请让我来盘点一下. Pars ...

  4. 细数Python Flask微信公众号开发中遇到的那些坑

    最近两三个月的时间,断断续续边学边做完成了一个微信公众号页面的开发工作.这是一个快递系统,主要功能有用户管理.寄收件地址管理.用户下单,订单管理,订单查询及一些宣传页面等.本文主要细数下开发过程中遇到 ...

  5. QT + OpenCV + MinGW 在windows下配置开发环境

           由于研究项目需要,最近开始接触C++界面设计,关于“QT + OpenCV + MinGW在windows下配置开发环境”着实让人头疼,单次配置时间相当长,也十分不容易,本人第一次配置成 ...

  6. Windows下OpenCV 3.1.0 在 Qt Creator 4.0.2 (Qt 5.7.0 MinGW) 中的开发环境配置

    2017-2-23 Update: 修改并添加了部分细节 最近正在学习OpenCV ,为毕业设计做准备.Windows版本的OpenCV都默认提供对VS的支持,其在VS中的配置比较简单,网上也有大批教 ...

  7. 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子

      本文介绍了如何使用技术栈PyCharm+Qt Designer+PyQt5来开发桌面软件,从环境搭建.例子演示到对容易混淆概念的解释.文中用到的全部软件+代码下载链接为:https://url39 ...

  8. Qt的进程间通信,以服务器的形式,手把手教你VS上进行Qt的COM、ActivedQt Server的开发,比保姆还保姆(一)

    Qt的进程间通信,以Active服务器的形式,手把手教你VS上进行Qt的COM.ActivedQt Server的开发,比保姆还保姆 写在前面,文中的ID有部分对不上,因为我中途改了一下,我建议你在实 ...

  9. 细数 Windows Phone 灭亡的七宗罪(过程很详细,评论很精彩,但主要还是因为太慢了,生态跟不上,太贪了,厂商不愿意推广)

    曾梦想仗剑走天涯,看一看世界的繁华 年少的心有些轻狂,如今你四海为家 曾让你心疼的姑娘,如今已悄然无踪影 犹记得上大学攒钱买了第一台智能手机Lumia 520时,下载的第一首歌曲<曾经的你> ...

  10. 细数iOS上的那些安全防护

    细数iOS上的那些安全防护  龙磊,黑雪,蒸米 @阿里巴巴移动安全 0x00 序 随着苹果对iOS系统多年的研发,iOS上的安全防护机制也是越来越多,越来越复杂.这对于刚接触iOS安全的研究人员来说非 ...

随机推荐

  1. CSP-S 2022~2023 补题

    下面的代码都是远古代码,不打算重写了. CSP-S 2023 T1 密码锁 题意:一个密码锁上有 \(5\) 个位置,每个位置上的数字是 \(0 \sim 9\) 的循环,每次打乱会选择一或两个相邻位 ...

  2. SqlUtils 使用

    一.前言 随着 Solon 3.0 版本发布,新添加的 SqlUtils 接口,用于操作数据库,SqlUtils 是对 Jdbc 原始接口的封装.适合 SQL 极少或较复杂,或者 ORM 不适合的场景 ...

  3. OpenELB 在 CVTE 的最佳实践

    作者:大飞哥,视源电子股份运维工程师, KubeSphere 社区用户委员会广州站站长,KubeSphere Ambassador. 公司介绍 广州视源电子科技股份有限公司(以下简称视源股份)成立于 ...

  4. AI五子棋_07 落子点四周棋形获取

    AI五子棋 第七步 恭喜你到达第七步! 到这一步,你对战场环境就有了充分的了解.下面我们准备打造机器大脑了.你可能已经有你自己的想法了,不过别着急,先跟着我的思路做.我会提示你解决一些基本的问题. 棋 ...

  5. 线性枚举(C语言)

    1.求最大值 比如求一个线性表中的最大值,可以先设定一个最大值,把它初始化为一个非常小的数,然后遍历给定的线性表,将其中的每个元素和目前的最大值比较,如果比它大,则更新这个最大值: 如果比它小,就不做 ...

  6. C++ 加权随机抽样

    ​ 在做五子棋 AI 的时候,遇到要根据权重从一组数里边随机选出一个这个问题.这个问题恰好也是 leetcode 第 528 道题,使用 C++,标准库就有现成的: #include <rand ...

  7. 高德地图API-搜索提示并定位到位置,卫星地图和标准地图的切换

    // _yourMap地图实例 _yourMap.plugin(["AMap.MapType"], function () { //添加地图类型切换插件 //地图类型切换 mapT ...

  8. pyenv-win-master\pyenv-win\libexec\pyenv-install.vbs(161, 5) Microsoft VBScript 运行时错误: 文件未找到

    Windows 10 运行 pyenv install 3.11.2 提示 pyenv-win-master\pyenv-win\libexec\pyenv-install.vbs(161, 5) M ...

  9. IDEA方法模板、类模板设置记录

    类模板 设置入口 Mac:common+,进入设置->Editor->File and Code Templates->Includes 模版代码 /** * todo * * @a ...

  10. Postman接口测试应用

    接口测试可以通过工具(postman/jmeter).自动化测试(python+requests+开源框架)两种方式进行测试 接口测试可以在单元测试之后开始进行,不用关注前端页面有没有形成,也可以渗透 ...