一、前言说明

在软件开发的漫漫征途中,我与 Qt 的邂逅本以为是一场美妙的合作,然而,现实却给了我沉重的一击。“垃圾 qt,毁我青春”,这句看似过激的话语,实则饱含了我在 Qt 开发之路上的无数辛酸与无奈。

二、版本问题

  • Qt 的版本乱象,堪称开发者的噩梦。从 4.6 到 6.8,甚至可能更快迎来的 Qt7,版本数量多如繁星。
  • 不仅如此,位数从 32 位跨越到 64 位,适配的操作系统涵盖 windows、linux、mac、android、ios 等,还有各式各样的嵌入式 linux 以及新兴的国产 linux。
  • msvc 版本需要对应安装 vs2005、vs2008、vs2010 等不同年份的 Visual Studio;mingw 版本也得安装不低于特定版本号的 mingw 编译器。
  • 这错综复杂的版本组合,让开发者仿佛置身于迷宫之中,难以找到正确的方向。
  • 为了实现跨平台应用开发,不得不配备多块硬盘,安装多个操作系统。虚拟机的诸多问题,更是迫使我们搭建真机环境进行测试。
  • 仅基础的操作系统,就需要安装 windows XP,WIN7 的 32 位和 64 位,WIN10 的 32 位和 64 位,以及 ubuntu 的 14.04、15.04、16.04 等版本。
  • 嵌入式开发中的交叉编译环境搭建,更是让人望而生畏。还记得 2012 年,为了搭建交叉编译环境,我耗费了整整 3 周的时间,那是一段充满煎熬与挫折的经历。
  • 而在 Qt 安卓开发中,环境搭建的难度也不容小觑。在原有安装了众多软件的电脑上搭建开发环境,往往以失败告终,必须使用全新安装的操作系统才行。
  • 无奈之下,我只好单独准备一块硬盘用于 Qt 安卓开发,这无疑增加了开发的成本与复杂性。

三、乱码问题

  • 乱码问题,如同 Qt 开发中的顽疾,长期困扰着开发者。
  • 在 Qt4 时代,这个问题尤为严重。常常是好不容易解决了界面乱码,输出却又出现乱码;解决了输出乱码,界面又再次乱码。
  • qdebug 打印也时常出现乱码情况,而且 mingw 和 msvc 环境下,同样的程序可能会出现不同的乱码问题。
  • 乱码提示往往晦涩难懂,宛如火星文,让人摸不着头脑,实在是坑爹。
  • 幸运的是,从 Qt5 之后,乱码问题有所缓解,但仍不时出现,给开发过程带来诸多不便。

四、方法变动

  • Qt 内置方法的频繁变动,也让开发者苦不堪言。一会儿 toAscii 方法存在,一会儿又消失不见;
  • QSound 原本在 QtGUI 中,后来却移到了 multimedia 中。
  • 浏览器内核也变来变去,原本稳定好用的 webkit 被抛弃,这种始乱终弃的做法,让开发者难以适从。
  • 高版本开发环境对低版本的不兼容,更是大忌。
  • 每一次大版本的更新,都意味着学习成本的大幅上升。
  • 网上大量的 Qt4 和 Qt5 时代的代码,在新的开发环境中无法正常编译,导致许多初学者下载代码后无法成功运行,从而丧失信心,甚至开始怀疑人生,觉得网上的资源都是骗人的。

五、发布问题

  • Qt 发布过程同样问题重重。对于初学者而言,高达几十兆的运行库文件,无疑是沉重的负担,令人崩溃。
  • 更可恨的是,有些程序在某些电脑上可以正常运行,在另一些电脑上却死活跑不起来。
  • 有错误提示还好,可很多时候直接无法运行,且没有任何提示,只能花费大量时间慢慢排查问题。
  • Qt 虽号称兼容性好,但实际上在一些平台相关特性方面,兼容性却很差。
  • 例如高分屏缩放的兼容性问题,直到 Qt6 都尚未得到妥善解决,看看 QtCreator 本身在高分屏上的显示效果就可见一斑。
  • qml 的兼容性也存在巨大的坑,极不稳定,在老式电脑上常常无法正常运行。
  • 在 Qt6 以前,qml 设计器更是糟糕,字体细小难看,操作极为不便,几乎无法使用。
  • 而且,qml 开发的商业产品或作品数量稀少,在移动端更是凤毛麟角。
  • 开发过程中还经常出现 debug 正常,release 却崩溃的情况,让人防不胜防。

六、严重依赖

  • 长期使用 Qt 进行开发,还容易产生严重的依赖症。
  • Qt 将许多功能都进行了封装,虽然提高了开发效率,但也让开发者逐渐失去了对底层代码的掌控能力,长此以往,可能会变成只会使用 Qt 的程序员,而非真正的 C++ 程序员。
  • qml 组件中的许多控件也不够完善,处于半成品状态,嵌套组件下的 Qml 设计器更是难以使用。
  • 此外,QtCreator 在 debug 调试方面表现不佳,功能鸡肋且容易崩溃,进一步影响了开发效率与体验。

七、结束的话

回首在 Qt 开发上耗费的时光,心中满是悔恨与无奈。它耗费了我大量的青春与精力,却并未给我带来与之匹配的收获与成就。“垃圾 qt,毁我青春”,这不仅仅是一句抱怨,更是我在 Qt 开发之路上历经磨难后的肺腑之言。希望 Qt 的开发者们能够重视这些问题,进行改进与优化,让 Qt 成为真正优秀、易用的开发框架 。

垃圾qt,毁我青春的更多相关文章

  1. NOIP2016Day2T2蚯蚓(队列+坑爹洛谷毁我青春)

    “卡常技术哪家强,中国OJ找洛谷” 去掉两个语句之后...95-->100 题目大意就不说了QWQ 首先65分裸优先队列,线段树,堆都可以... 100分:开三个队列,第一个存没被砍过的蚯蚓(要 ...

  2. bzoj_auto_submiter(辣鸡Py毁我青春系列)

    听说你们的bzoj小号都很厉害? 不如试试bzoj金坷垃——bzoj_auto_submiter! 把所有的代码拖进解压后的文件夹,然后双击run.cmd. 看到有chrome浏览器窗口弹出来不要慌, ...

  3. Censoring【自动AC机】【水题毁我青春】【20190614】

    这题简直比注水猪肉还水QAQ. 以前做过KMP的Censoring单串匹配,果断选择自动AC机w 对短串建自动AC机 长串去机子里匹配 用个栈边匹配边弹出 记得弹出一个串后把匹配点指向栈顶就ojbk ...

  4. [HNOI2004]Language L语言

    2777: [HNOI2004]Language L语言 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 10  Solved: 5[Submit][S ...

  5. 「2017 山东三轮集训 Day1」Flair

    模拟赛的题 好神仙啊 题面在这里 之前的Solution很蠢 现在已经update.... 题意 有$ n$个商品价格均为$ 1$,您有$ m$种面值的货币,面值为$ C_1..C_m$ 每种物品你有 ...

  6. Fetch的使用及兼容ie的处理

    Fetch 作为一个与时俱进的前端,Fetch当然应该有所了解和涉猎.如果你没有听说过Fetch,那么ajax应该不陌生吧.Fetch相当于是一个新版本的Ajax,虽然现在我们常常使用的仍是ajax, ...

  7. PKUWC2019游记&&WC2019游记

    今天好颓,不想写代码了,写写游记 PKUWC2019游记&&WC2019游记 PKUWC2019游记 提前两天就来了中山纪中,考了两天模拟,第一天比较正常,但是可做题只有T3,第二天非 ...

  8. APIO 2018 游记

    上接CTSC 2018 游记 day1 早上大概八九点起来洗了个澡跑到隔壁寝发现 tj 还在??? 原来昨天晚上听错名字了... 下午一起去 wfj 王府井玩,陪李总逛逛奢侈品店... 走了两三个小时 ...

  9. [ CodeForces 1059 D ] Nature Reserve

    \(\\\) \(Description\) 你现在有\(N\)个分布在二维平面上的整点\((x_i,y_i)\),现在需要你找到一个圆,满足: 能够覆盖所有的给出点 与\(x\)轴相切 现在需要你确 ...

  10. [BZOJ2667][cqoi2012][kcoj]模拟工厂

    题目描述 Description 有一个称为“模拟工厂”的游戏是这样的:在时刻0,工厂的生产力等于1.在每个时刻,你可以提高生产力或者生产商品.如果选择提高生产力,在下一个时刻时工厂的生产力加1:如果 ...

随机推荐

  1. 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理

    在 AI 编程领域国内外有一堆能叫的上号的应用: Cursor Windsurf Trae 阿里的「通义灵码」 百度的「文心快码」 字节跳动的「MarsCode」 科大讯飞的「iFlyCode」 Gi ...

  2. Qt QHeaderView 添加复选框

    QT QTableView 表头添加复选框 最近在做表格,用QTableView,然后有一个需求是给表格添加表头,但是没有一个API能够在表头添加复选框,基本都是来重载QHeaderView,有两种方 ...

  3. 【Azure Fabric Service】演示使用PowerShell命令部署SF应用程序(.NET)

    问题描述 在中国区微软云Azure上使用Service Fabrics服务,本地通过Visual Studio 2022的发布.NET应用,发现无法发布! 在搜寻官方文档之后,可以通过PowerShe ...

  4. linux 关机方法

    虚拟机是虚拟技术的一种,很多用户会在虚拟机上边使用命令来进行自定义操作关机,这样方便快捷,能够有更多的时间处理别的事情,那么还有没有其他更容易操作的poweroff关机命令呢?一起来看下吧. 虚拟机关 ...

  5. CSAPP学习笔记——chapter9 虚拟内存

    CSAPP学习笔记--chapter9 虚拟内存 虚拟内存提供三个重要的功能.第一,它在主存中自动缓存最近使用的存放磁盘上的虚拟地址空间的内容.虚拟内存缓存中的块叫做页.对磁盘上页的引用会触发缺页,缺 ...

  6. CoreOS 更新重启后, 所有容器服务全部停掉了

    今天有几个服务出问题了,上去看了下,这台 CoreOS 下的所有容器服务竟然全部停掉了,好奇怪,启动容器时明明加了--detach参数了呀. 问题原因 想了想,会不是是 CoreOS 更新重启导致的, ...

  7. 离线版nRF Connect for Desktop安装方法

    首先确保两台电脑都安装了nRF Connect for Desktop 先在一台能连网的电脑上安装自己想要的App 然后把APP拷贝到没有网的电脑上 从%USERPROFILE%\.nrfconnec ...

  8. 学习unigui【26】关于Unigui控件的个性化CSS框架

    用unigui写程序,简单的事用户界面不用HTML.因为这个太闹心了.没有什么技术含量,但很闹心. 但是,但是不清楚HTML CSS更闹心.因为养眼的界面是客户起步疑问和要求. 强烈推荐认真读明白大虾 ...

  9. DevOps工程师技能

    技术背景 DevOps工程师必须持有计算机科学.工程或其他相关领域的学位.2年以上工作经验.这包括开发人员.系统管理员或devops驱动的团队成员的工作.这是一个重要的需求,同时也是对所有IT操作的理 ...

  10. Codeforces Round 971 (Div. 4)

    C. The Legend of Freya the Frog 因为是从x开始跳,贪心的取肯定是直接用max(a,b)/d向上取整然后再乘2,但是要注意,如果再x到达之前,y已经是到达了,也就是某次以 ...