Qt 的发展历史、现状与启示

Qt 最早在1991年由挪威的两位程序员 Eirik Chambe-Eng 和 Haavard Nord 开发,他们在1994年创立 Trolltech 公司(奇趣科技)正式经营软件业务。Qt 的第一个公众预览版于1995年面世,之后在2008年被诺基亚收购;2011年到2012年,在诺基亚全面转向微软系后,将 Qt 软件业务出售给了芬兰 IT 服务公司 Digia;2016年,Qt 公司从 Digita 独立出来并在芬兰上市;2017年获得 1500 万欧元投资;2018年在坚持了20多年后,Qt 终于迎来了物联网时代,在智能汽车、智能制造业等领域变得愈发重要。

初创阶段

Haavard 和 Eirik 相识于特隆赫姆(Trondheim)的挪威科技学院,这也是他们获得计算机科学硕士学位的地方。1988年,一家瑞典公司委派 Haavard 开发一套 C++ 的用户界面框架,从此,Haavard 对 C++ 用户界面开发产生了浓厚兴趣。

两年后,1990年夏天,Haavard 与 Eirik 一起在特隆赫姆医院从事超声设备的软件开发,开发一个基于 C++ 的超声图像数据库系统。这个系统需要在 Unix、Macintosh 和 Windows 系统上运行,并带有图形用户界面。这个夏天的一天,Haavard 和 Eirik 外出享受阳光,他们坐在公园长椅上,Haavard 说:“我们需要一个面向对象的显示系统。” 这场讨论是面向对象的跨平台图形用户界面框架的理论基础,而他们也将投入于创建这一框架。可以说,正是由于对当时跨平台软件开发工具的不满意,他们才决定开发 Qt。

1991年,Haavard 和 Eirik 开始合作构建 Qt,Eirik 负责设计,Haavard 则编写最终成为 Qt 的那些类。之后的一年,Eirik 提出了“信号和槽”的构想,这是一个简单但功能强大的图形用户界面编程规范,如今已被多个工具包实现。Haavard 接受了这一构想并进行了代码实现。1993年,Haavard 和 Eirik 开发出了 Qt 的第一个图形内核类并用以实现他们自己的窗口部件。1993年底,Haavard 建议进军商业领域,从而创建“世界上最好的 C++ 图形用户界面开发框架”。

1994年3月4日,Haavard 和 Eirik 共同创立了 Quasar Technologies 公司,后更名为 Troll Tech,也就是后面人们熟知的 Trolltech(奇趣科技)。对于这两位年轻的程序员来说,1994年的开始是不幸的,他们想进入一个稳定的市场,却没有客户和资金,只有一个未完成的产品。幸运的是,他们的妻子都有工作,可以支撑他们进行两年的产品开发。Eirik 和 Haavard 预计两年后就可以开始赚钱了。

至于为什么这个图形框架取名为“Qt”,是因为字母 Q 在 Haavard 的文本编辑器 Emacs 字体上看起来非常完美,因此“Q”被选作了类名的前缀。同时,受 Xt(XToolkit 的缩写)的启发,又添加了字母“t”,代表工具包(Toolkit)。

1995年4月,在 Haavard 一个大学教授的介绍下,一家挪威公司 Metis 雇佣他们使用 Qt 开发软件。几乎与此同时,奇趣科技招聘了 Arnt Gulbrandsen。在奇趣科技的六年里,Arnt 设计实现了独具特色的文档系统,对 Qt 的代码也做出了不少贡献。

1995年5月20日,在 sunsite.unc.edu 上传了 Qt 0.90 版本。六天后,Qt 的发行版本发布在 comp.os.linux.announce 上。这是 Qt 的首个公开发行版本。Qt 可以用于进行 Windows 和 Unix 系统开发,并在两个系统平台上提供相同的应用程序接口(API)。从第一天起,Qt 就提供了两种授权许可版本:用于商业开发的商业许可版和用于开源开发的免费版本。Metis 的合同保证了奇趣科技的正常发展,然而,在之后的十个月里再没有一个人购买 Qt 的商业许可协议。

1996年3月,欧洲太空总署成为了 Qt 的第二个用户,并购买了 10 个 Qt 的商业许可协议。凭着坚定的信念,Eirik 和 Haavard 又雇佣了其他开发人员。5月底,Qt 0.97 版本发布;9月24日,Qt 1.0 版本发布;同年年底,Qt 已经发布到了 1.1 版本。来自不同国家的八个用户购买了 18 个许可协议。也是在这一年,在 Matthias Ettrich 带领下,开始了 KDE 项目。

Qt 1.2 版本于1997年4月发布。Matthias Ettrich 用 Qt 构建 KDE 的决定帮助 Qt 成为 Linux 系统上开发 C++ 图形用户界面的事实标准。1997年9月,Qt 1.3 版本发布。

Matthias 于1998年加入奇趣科技,9月份,Qt 1.x 的最后一个主版本 1.40 版发布。1999年6月,Qt 2.0 发布。Qt 2 有一个新的开源许可协议 —— Q公共许可协议(Q Public License,QPL),它与开源的定义一致。1999年8月,Qt 赢得了 LinuxWorld 的最佳库/工具奖,开始受到投资者的广泛关注,并在2000年互联网泡沫破灭之前获得了 800 万美元的资金。与此同时,奇趣科技有限公司(澳大利亚)(Trolltech Pty Ltd)成立。

奇趣科技在2000年发布了 Qt/Embedded Linux。它被设计作为 X11 的轻量级替代产品,运行于嵌入式 Linux 系统设备,并提供窗口系统。Qt/X11 和 Qt/Embedded Linux 不仅提供了商业许可协议,还提供了被广泛应用的 GNU 公用许可协议(General Public License,GPL)。2000年年底,奇趣科技有限公司(美国)(Trolltech Inc)成立,并发布了 Qtopia 的首个版本。Qtopia 是应用于移动电话和掌上电脑(PDA)的应用软件平台。Qt/Embedded Linux 在2001和2002年连续两年赢得了 LinuxWorld 的“最佳嵌入式 Linux 解决方案奖”,Qtopia Phone 在2004年获得了相同奖项。

2001年,Qt 3.0 版本发布。Qt 已经可以应用于 Windows、MacOS X、Unix 和 Linux(桌面系统和嵌入式系统)系统。Qt 3 提供了 42 个新的类,代码行也超过了 500000 行。Qt 3 在 Qt 2 的基础上迈进了一大步,在很多方面进行了重大改进,主要包括本地化、统一字符编码标准(Unicode)支持、一个全新的文本编辑查看部件以及一个类似于 Perl 的正则表达式类。Qt 3 在2002年获得了 SoftwareDevelopment Times 的"Jolt Productivity Award"。

2005年夏天,Qt 4.0版本发布。Qt 4 较之前版本更加全面和丰富,共有大约 500 个类和 9000 多个函数。Qt 被分成了几个不同的函数库,开发人员只需要链接他们用到的那部分即可。Qt 4 在前续版本上进行了重大改进,包括一套全新的高效易用的模板容器、高级的模型/视图功能、灵活高速的二维绘制框架、强大的 Unicode 文本读写类以及对 Qt 类进行的数以千计的功能增强。伴随着 Qt 应用范围的扩大,Qt 已不仅仅是一个图形用户界面工具包,俨然发展成一个成熟的应用开发框架。Qt 4 也是首个在其支持的所有平台上既能进行商业开发又能进行开源开发的 Qt 版本。

同样是在2005年,奇趣科技在北京成立了办事处,以发展中国客户,并提供 Qt/Embedded Linux 和 Qtopia 的销售服务、培训及技术支持。

通过一些非官方的语言绑定件,非 C++ 程序员也早就开始使用 Qt 了,尤其是 Python 程序员使用的 PyQt。2007年,针对 C# 程序员发布了 Qyoto 非官方绑定件。同年,奇趣科技正式推出了 Qt Jambi,这是一个官方支持的 Java 版 Qt 应用编程接口。

自奇趣科技诞生以来,其推广普及就从未减弱过,时至今日仍在快速增长。Qt 的成功反映了 Qt 的品质和其易用性。多年来,Qt 已成为世界领先的软件开发框架之一,如今已成为跨各种平台创建应用程序的行业标准,在全世界拥有数以千计用户和数以万计的开源开发者的产品。

Nokia 阶段

诺基亚(Nokia)曾是全球手机市场的霸主,但自从2007年 iPhone 掀起的智能手机革命,加上 Android 的出现,诺基亚逐渐走向衰落。

2008年,诺基亚以 1.53 亿美元收购奇趣科技并将其改名为 Qt Software,以加速诺基亚针对移动终端和桌面应用跨平台的软件战略的实施,以及拓展其互联网服务业务。2009年8月,Qt Software 再次改名为 Qt Development Frameworks(Qt 开发框架)。

从正式发布开始,Qt 就提供了两种授权许可版本,即适用于商业项目的商业许可版和适用于开源项目的 GPL 许可。2009年1月,诺基亚宣布 Qt 支持 LGPL 2.1 授权,将其推向开源。这实质上是为了让更多开发人员可以免费使用它,虽然仍有一些模块使用不开源的 Qt 授权。(LGPL 授权的限制强度处于 GPL 和 BSD 之间,也为 Mozilla 和 OpenOffice 等开源软件所采用的许可证)

在此期间,诺基亚联合英特尔利用 Qt 开发了全新的智能手机系统 MeeGo,可惜遭遇了微软木马屠城,诺基亚最终被迫放弃了 MeeGo,而 Qt 商业授权业务也于2011年3月出售给了芬兰 IT 服务公司 Digia。2011年第二季度,诺基亚被苹果和三星双双超越,在智能手机市场的销量落后于苹果及三星的手机,而在低端手机市场,又无法制住其它的亚洲竞争对手。2013年9月3日,微软宣布将以 72亿美元收购诺基亚手机制造等业务;2014年11月,诺基亚宣布不会再制造手机。

Digia 阶段

2011年至2012年间,芬兰 IT 服务公司 Digia Oyj 从诺基亚收购所有 Qt 业务,并计划使 Qt 支持 Android、iOS 和 Windows 8,大力推广移动平台开发和商业应用。

2014年9月,Digia 宣布成立 Qt Company 全资子公司,独立运营 Qt 商业授权业务。2016年3月,Qt 公司(Qt Group)被 Digia 分拆为独立公司,并于同年5月在赫尔辛基证券交易所挂牌上市。经历艰难曲折,Qt 终于算是步入正轨了。

如今,Qt 依然提供了 GPL、LGPL 和 Commercial 三种授权协议。根据公开资料,Qt 目前在全球12个国家拥有近700名员工(其中300名研发),2022财年销售收入 1.55 亿欧元。

扩展阅读

  • About Qt - Qt Wiki
  • Qt History - Qt Wiki
  • Qt version history - Qt Wiki
  • Qt (software) - 维基百科
  • Qt Project - 维基百科
  • 诺基亚 - 维基百科

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/515309.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Oracle篇】expdp/impdp高效完成全部生产用户的全库迁移(第四篇,总共四篇)

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️…

SEO必备,网站词库拓展建设

我以前做网站是没有词库这个概念的,今天恰巧和站长交流的时候提到了词库的建设,大致问题就是如何增加词库。其实我也不是特别明白,只是听说使用长尾关键词挖掘然后拓展,至于怎么用,也没有聊到。 所以我的求知欲让我去…

Spring Boot:Web开发之视图模板技术的整合

Spring Boot 前言Spring Boot 整合 JSPSpring Boot 整合 FreeMarkerSpring Boot 整合 ThymeleafThymeleaf 常用语法 前言 在 Web 开发中,视图模板技术(如 JSP 、FreeMarker 、Thymeleaf 等)用于呈现动态内容到用户界面的工具。这些技术允许开…

CSS设置网页背景

目录 概述: 1.background-color: 2.background-image: 3.background-repeat: 4.background-position: 5.background-attachment: 6.background-size: 7.background-origin: 8.background-…

SAP_MM模块-无价值物料管理实现思路

无价值物料管理实现思路 业务背景一: 对于工具类的物料,本来想通过无物料号,收货时直接消耗在成本中心的方式来处理,这样,工程部和采购部都比较方便。 但财务部提出这部分工具物料还需要进行库存管理,但…

【Python异常处理】

在Python无法正常处理程序时就会发生异常,此时我们需要捕捉并处理它,否则程序就会终止执行。 例如: x 1 / 0 print(x)运行结果: ZeroDivisionError: division by zero #此时程序终止执行Python提供了三个非常重要的功能来处理…

ubuntu20.04下搜狗输入法的安装

1、安装 fcitx 输入法的框架 sudo apt install fcitx-bin sudo apt-get install fcitx-table 2、Ubuntu下的默认浏览器火狐搜索 搜狗输入法 搜狗输入法linux-首页 (下载x86_64) 3、安装依赖 sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-modu…

【漏洞复现】万户 ezOFFICE wf_printnum SQL注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

【学习心得】Numpy学习指南或复习手册

本文是自己在学习Numpy过后总是遗忘的很快,反思后发现主要是两个原因: numpy的知识点很多,很杂乱。练习不足,学习过后一段时间不敲代码就会忘记。 针对这两个问题,我写了这篇文章。希望将numpy的知识点织成一张网&…

JavaScript高级应用

学习作用域、变量提升、闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法,降低代码的冗余度。 理解作用域对程序执行的影响 能够分析程序执行的作用域范围 理解闭包本质,利用闭包创建隔离作用域 了解…

面试总结------2024/04/04

1.面试官提问:你说你在项目中使用springsecurity jwt 实现了登录功能,能简单讲一下怎么实现的吗? 2.使用RabbitMQ实现订单超时取消功能 订单状态定义 首先,我们需要定义订单的不同状态。在这个示例中,我们可以定义以下…

[COCI 2011/2012 #5] EKO / 砍树 (二分)不开龙永远的痛!

不开龙long永远的痛&#xff01; 不开龙long永远的痛&#xff01; 不开龙long永远的痛&#xff01; 不开龙long永远的痛&#xff01; 不开龙long永远的痛&#xff01; //应该以最高的树为基准二分 初次尝试&#xff1a; #include<algorithm> #include<iostream&g…

图的深度优先遍历DFS得到各节点的度

在 一文中&#xff0c;我们通过了广度优先搜索来得到图结构中各结点的度&#xff0c;在这一篇文章中&#xff0c;我们要通过深度优先搜索来得到图结构中各结点的度。 初始化 初始化&#xff0c;在下面的代码中&#xff0c;我们创建了一个具有6个结点的图结构&#xff0c;以及…

YOLO电动车检测识别数据集:12617张图像,yolo标注完整

YOLO电动车检测识别数据集&#xff1a;12617张图像&#xff0c;电动车一类&#xff0c;yolo标注完整&#xff0c;部分图像应用增强。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 需要此数据集或其他任何数据集请私信

【调度工具】Azkaban用户手册

目录 一、概述 1.1 Azkaban 是什么 1.2 Azkaban 特点 1.3 Azkaban 与 Oozie 对比 功能 工作流定义 工作流传参 定时执行 资源管理 工作流执行 工作流管理 1.4 Azkaban 运行模式及架构 Azkaban 三大核心组件 Azkaban有两种部署方式 Azkaban Web Server Azkaban …

简约轻量-失信录系统源码

失信录系统-最新骗子收录查询系统源码 首页查询&#xff1a; 举报收录页&#xff1a; 后台管理页&#xff1a; 失信录系统 V1.0.0 更新内容&#xff1a; 1.用户查询,举报功能 2.界面独立开发 3.拥有后台管理功能 4.xss,sql安全过滤 5.平台用户查询 6.用户中心&#xff08;待完…

IO流:字节流、字符流、缓冲流、转换流、数据流、序列化流 --Java学习笔记

目录 IO流 IO流的分类 IO流的体系 字节流&#xff1a; 1、Filelnputstream(文件字节输入流) 2、FileOutputStream(文件字节输出流) 字节流非常适合做一切文件的复制操作 复制案例&#xff1a; try-catch-finally 和 try-with-resource 字符流 1、FileReader(文件字符…

JimuReport 积木报表

一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于 excel 操作风格&#xff0c;通过拖拽完成报表设计…

C#学生信息管理系统

一、引言 学生信息管理系统是现代学校管理的重要组成部分&#xff0c;它能够有效地管理学生的基本信息、课程信息、成绩信息等&#xff0c;提高学校管理的效率和质量。本文将介绍如何使用SQL Server数据库和C#语言在.NET平台上开发一个学生信息管理系统的课程设计项目。 二、项…

前端学习<四>JavaScript基础——02-JavaScript入门:hello world

开始写第一行 JavaScript&#xff1a;hello world JS 代码的书写位置在哪里呢&#xff1f;这个问题&#xff0c;也可以理解成&#xff1a;引入 JS 代码&#xff0c;有哪几种方式&#xff1f;有三种方式&#xff1a;&#xff08;和 CSS 的引入方式类似&#xff09; 行内式&…