当前位置: 首页 > news >正文

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 - 维基百科
  • 诺基亚 - 维基百科

相关文章:

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

Qt 最早在1991年由挪威的两位程序员 Eirik Chambe-Eng 和 Haavard Nord 开发,他们在1994年创立 Trolltech 公司(奇趣科技)正式经营软件业务。Qt 的第一个公众预览版于1995年面世,之后在2008年被诺基亚收购;2011年到201…...

Quiet-STaR:让语言模型在“说话”前思考

大型语言模型(llm)已经变得越来越复杂,能够根据各种提示和问题生成人类质量的文本。但是他们的推理能力让仍然是个问题,与人类不同LLM经常在推理中涉及的隐含步骤中挣扎,这回导致输出可能在事实上不正确或缺乏逻辑。 考虑以下场景:正在阅读一…...

【Kotlin】匿名类和伴生类

1 匿名类 1)无继承 fun main() {var obj object {var name: String "zhang"override fun toString(): String {return name}}println(obj) // zhang } 2)有继承 fun main() {var obj object: People {var name: String "zhang"…...

【机器学习算法介绍】(3)决策树

决策树是一种常见的机器学习算法,用于分类和回归任务。它模拟了人类决策过程,通过一系列的问题来引导决策。决策树的构建涉及三个主要步骤:特征选择、树的构建和树的剪枝。 1. 特征选择 特征选择是决策树构建过程中的第一步,目的…...

算法之查找

1、顺序查找: package com.arithmetic.search; //顺序查找 //sequentialSearch 方法接收一个整数数组和一个目标元素作为参数,并使用顺序查找的方式在数组中查找目标元素。 //它通过循环遍历数组元素,逐个与目标元素比较,如果找到…...

LInux脚本学习

1.注释 #单行注释 以 # 字符开头就是单行注释 当然第一行除外,比较特殊 2.多行注释 3.Shell文件的作用 Shell文件就是linux命令集 4.sh脚本的执行方式 bash xxx.sh 5.新建的文件会没有执行权限 #为文件赋予执行权限 chmod ux xxx.sh 6.编写规范 #!/bin/bash #…...

JavaWeb基础(计网 socket 数据库 JDBC lombok Mybatis JUnit Maven)

本文用于检验学习效果,忘记知识就去文末的链接复习 1. 网络基础 1.1 计网基础 区分设备:IP地址 区分网络:网络地址 网络互联:路由器 主机上进程间通信:端口 http是常用的协议,基于TCP协议 TCP VS U…...

【HBase】

什么是HBase HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。 访问层次(数据…...

Vue3:使用Pinia存储、读取、修改数据

一、存储数据 Pinia插件中,存储数据的配置项是state count.ts import {defineStore} from piniaexport const useCountStore defineStore(count,{// 真正存储数据的地方state(){return {sum:6}} })loveTalk.ts import {defineStore} from piniaexport const use…...

基于 Quartz.NET 可视化任务调度平台 QuartzUI

一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理,Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录&#xf…...

前端三剑客 —— CSS (第三节)

目录 上节回顾: 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 : 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…...

C# 系统学习(异步编程)

在C#中,异步编程是一种优化程序性能的关键技术,特别是在处理I/O密集型操作(如网络请求、数据库查询、文件读写等)时,能够有效避免由于长时间等待而导致的线程阻塞,从而提高应用的响应速度和资源利用率。asy…...

前端工程师————CSS学习

选择器分类 选择器分为基础选择器和复合选择器 基础选择器包括:标签选择器,类选择器,id选择器,通配符选择器标签选择器 类选择器 语法:.类名{属性1: 属性值;} 类名可以随便起 多类名使用方式&am…...

C# 登录界面代码

背景 MVVM 是一种软件架构模式,用于创建用户界面。它将用户界面(View)、业务逻辑(ViewModel)和数据模型(Model)分离开来,以提高代码的可维护性和可测试性。 MainWindow 类是 View&a…...

点云的Python均值采样

一、代码 Python import numpy as np import open3d as o3ddef mean_sampling(point_cloud, num_samples=None, depth=None, method=knn, k=10):"""对点云进行均值下采样。:param point_cloud: Open3D PointCloud对象:param num_samples: (仅当method=knn时使…...

xss-labs 11-13通关记录

前言 最近复习xss知识&#xff0c;整理一下xss的绕过思路。 level11 观察测试: 1.四个隐藏参数标签 2.全部get传参一遍发现t_sort可赋值&#xff0c;使用的是get传参 3.针对t_sort测试过滤的字符 t_sort< > & ; " 检测到他除了<>,别的全部过滤。 因为…...

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…...

技术揭秘:如何打造完美互动的充电桩硬件与服务平台?

充电桩平台全套源码地址 https://gitee.com/chouleng/cdzkjjh.git 这张图像是一个系统或服务的架构图。以下是对图中各个部分的描述&#xff1a; 前端&#xff1a; 位于图像的顶部&#xff0c;颜色为浅绿色。用户服务端&#xff1a; 紧邻前端&#xff0c;颜色为淡黄色。设备服…...

【Django学习笔记(四)】JavaScript 语言介绍

JavaScript 语言介绍 前言正文1、JavaScript 小案例2、代码位置2.1 在当前 HTML 文件中2.2 在其他 js 文件中 3、代码注释3.1 HTML的注释3.2 CSS的注释3.3 Javascript的注释 4、变量 & 输出4.1 字符串4.2 数组4.3 对象(python里的字典) 5、条件语句6、函数7、DOM7.1 根据 I…...

IO和NIO的主要区别在哪里?

Java 中的 IO&#xff08;输入/输出&#xff09;和 NIO&#xff08;新输入/输出&#xff09;都是处理输入和输出操作的方式&#xff0c;它们的主要区别在于如何处理数据的读写。 阻塞与非阻塞: IO是阻塞的&#xff0c;这意味着当一个线程调用read()或write()时&#xff0c;该线…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...