Qt

✍ dations ◷ 2025-09-15 18:10:57 #Qt

Qt(/ˈkjuːt/,发音同“cute”)是一个跨平台的C++应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,例如控制台工具和服务器。Qt被用于OPIE、Skype、VLC media player、Adobe Photoshop Elements、VirtualBox与Mathematica以及被Autodesk 、欧洲空间局、梦工厂、Google、HP、KDE、卢卡斯影业、西门子公司、沃尔沃集团, 华特迪士尼动画制作公司、三星集团、飞利浦、Panasonic 所使用。

它是Digia公司的产品。Qt使用标准的C++和特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏。通过语言绑定,其他的编程语言也可以使用Qt。

Qt是自由且开放源代码的软件,在GNU宽通用公共许可证(LGPL)条款下发布。所有版本都支持广泛的编译器,包括GCC的C++编译器和Visual Studio。

Haavard Nord(德语:Haavard Nord)和Eirik Chambe-Eng(德语:Eirik Chambe-Eng)于1991年开始开发“Qt”,1994年3月4日创立公司,最早名为Quasar Technologies,然后更名为Troll Tech,之后又再次更名为Trolltech,中文名是“奇趣科技”,2008年6月17日被NOKIA公司收购,以增强该公司在跨平台软件研发方面的实力,更名Qt Software。

该工具包名为Qt是因为字母Q在Haavard的Emacs字体特别漂亮,而“t”代表“toolkit”,灵感来自Xt,X toolkit。

2009年5月11日,诺基亚Qt Software宣布Qt源代码管理系统面向公众开放,Qt开发人员可通过为Qt以及与Qt相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造Qt未来的发展。为了便于这些内容的管理,Qt Software启用了基于Git和Gitorious开源项目的Web源代码管理系统。

在推出开放式Qt代码库的同时,Qt Software在其网站发布了其产品规划(Roadmap)。其中概述了研发项目中的最新功能,展现了现阶段对Qt未来发展方向的观点,以期鼓励社区提供反馈和贡献代码,共同引导和塑造Qt的未来。2012年8月9日,Digia宣布已完成对诺基亚Qt业务及软件技术的全面收购,并计划将Qt应用到Android、iOS及Windows 8平台上。

使用Qt开发的软件,相同的代码可以在任何支持的平台上编译与执行,而不需要修改源代码。会自动依平台的不同,表现平台特有的图形界面风格。

自从诺基亚开放了Qt的源代码给社群后,Gitorious上各种移植纷纷出现。下面是其中一部分:

Qt开放源代码,并且提供自由软件的用户协议。使得它可以被广泛地应用在各平台上的开放源代码软件开发中。

Qt提供三种授权方式。三种授权方式的功能、性能都没有区别,仅在于授权协议的不同。LGPL和GPL是免费发布,商业版则需收取授权费。:

经过多年发展,Qt不但拥有了完善的C++图形库,而且近年来的版本逐渐集成了数据库、OpenGL库、多媒体库、网络、脚本库、XML库、WebKit库等等,其核心库也加入了进程间通信、多线程等模块,极大的丰富了Qt开发大规模复杂跨平台应用程序的能力,真正意义上实现了其研发宗旨“Code Less; Create More; Deploy Anywhere”。

由于各家编译器规格不同,Qt本身为了跨平台兼容性,只能以“最低兼容规格”来设计。因此Qt必须具备RTTI、动态创建、Persistence/Serialization的基础建设,以及建构出自己的容器组件。

Qt的图形用户界面的基础是QWidget。Qt中所有类型的GUI组件如按钮、标签、工具栏等都派生自QWidget,而QWidget本身则为QObject的子类。Widget负责接收鼠标,键盘和来自窗口系统的其他事件,并描绘了自身显示在屏幕上。每一个GUI组件都是一个widget,widget还可以作为容器,在其内包含其他Widget。

QWidget不是一个抽象类别。并且可以被放置在一个已存在的用户界面中;若是Widget没有指定父Widget,当它显示时就是一个独立的视窗、或是一个顶层widget。QWidget显示能力包含了透明化及Double-Buffering。Qt提供一种托管机制,当Widget于创建时指定父对象,就可把自己的生命周期交给上层对象管理,当上层对象被释放时,自己也被释放。确保对象不再使用时都会被删除。

Qt利用信号与槽(signals/slots)机制取代传统的callback来进行对象之间的沟通。当操作事件发生的时候,对象会发提交一个信号(signal);而槽(slot)则是一个函数接受特定信号并且执行槽本身设置的动作。信号与槽之间,则透过QObject的静态方法connect来链接。

信号在任何执行点上皆可发射,甚至可以在槽里再发射另一个信号,信号与槽的链接不限定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到同一个槽,甚至信号也可连接到信号。

以往的callback缺乏类型安全,在调用处理函数时,无法确定是传递正确类型的参数。但信号和其接受的槽之间传递的资料类型必须要相符合,否则编译器会提出警告。信号和槽可接受任何数量、任何类型的参数,所以信号与槽机制是完全类型安全。

信号与槽机制也确保了低耦合性,发送信号的类别并不知道是哪个槽会接受,也就是说一个信号可以调用所有可用的槽。此机制会确保当在"连接"信号和槽时,槽会接受信号的参数并且正确执行。

布局管理类别用于描述一个应用程序的用户界面中的Widget是如何放置。当视窗缩放时,布局管理器会自动调整widget的大小、位置或是字号,确保他们相对的排列和用户界面整体仍然保有可用性。

Qt内置的布局管理类型有:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。这些类别继承自QLayout,但QLayout非继承自QWidget而是直接源于QObject。他们负责widget的几何管理。想要创建更复杂的版面配置,可以继承QLayout来自定义版面配置管理员。

Qt提供了下列主视窗管理和相关的用户界面组件的类别:

Graphics View提供了用于管理和交互大量定制的2D图形对象的平面以及可视化显示对象的视图widget,并支持缩放和旋转功能。

整个Graphics View框架提供一个以Item为基础的model-view设计。由3个主要的类别组成,分别是QGrphicsItem、QGraphicsScene和QGraphicsView。若干View可以显示一个Scene,Scene中则包含不同几何形状的Item。

该框架包括一个事件传播的架构,让在Scene上的Item有双精度的交互能力。Item可以处理键盘事件,鼠标按下、移动、释放和双击事件,他们也可以跟踪鼠标移动。

Graphics View使用BSP(二进制空间划分)树可非常快速地找到Item,因此即使是包含百万个Item的大型Scene,也能实时图形化显示。

KDE中的Plasma亦是基于Graphics View实现的。

无障碍环境需要无障碍兼容的应用程序、辅助技术、以及辅助工具之间的合作。应用程序通常不会直接沟通辅助工具,而是通过一个辅助技术,这是一个应用程序和工具之间信息交流的桥梁。用户界面元素相关消息,例如按钮和滚动条,使用辅助技术来显示。Qt支持Windows上的Microsoft Active Accessibility(MSAA)和Mac OS X上Mac OS X Accessibility。

无障碍兼容的应用程序称为AT-Servers,而辅助工具被称为AT-Clients。Qt应用程序通常会是一个AT-Server,但特别的程序也可能如同AT-Client方式工作。

Qt的字体引擎能够在同一时间正确的显示各种不同的书写系统。并且Qt内部使用Unicode编码来存储文字。

Qt的多国语言支持技术,可以让应用程序中的文字全部使用英文撰写,能够在完全不需修改程序的状况下,改变整个应用程序中的文字为另一个语系的文字,并能够协助处理不同语言的单、复数问题。

独立的翻译文件使得新增支持语言相当容易,同时翻译文件(.ts)为XML格式可以直接编辑或使用Qt Liguist进行翻译,可让无程序开发能力的翻译者亦能独自完成翻译。Qt附带的工具程序就能够自动抽取需要翻译的文字产生翻译文件。

Qt的线程支持是独立于平台的线程类别,采用信号与槽机制,实现类型安全的线程间通讯。这使得它易于开发具可移植性的多线程Qt应用程序。并能充分利用多核架构,获得最佳运行性能,还能根据可用的处理器内核数自动调整使用的线程数。多线程程序设计也是一个执行耗时操作而不会冻结用户界面的有效典范。

除了C++外,Qt还为其它多种计算机语言提供了应用程序接口,您也可以使用这些语言开发Qt应用程序。

Qt提供了一些命令行和图形工具,以方便和加速开发的过程。

Qt Solutions提供Qt额外的组件和工具,使Qt的开发更有效率。在Qt 4.5之后,Qt Solutions加入了LGPL的许可

以下的窗口管理器,使用了Qt:

一些出名的例子如下:

Akonadi · Decibel · Flake · KConfig XT · KJS · KDOM · KHTML · KIO · Kiosk · KIPI · KParts · Kross · KSVG · NEPOMUK · Oxygen · Phonon · Solid · Sonnet · Soprano · Strigi · ThreadWeaver · XMLGUI · KDE Frameworks 5

KDM · KWin · Plasma · 系统设置 · KDE Plasma 5

无障碍环境 · 管理 · 美工 · KDEBase · kdebase-workspace · 语言绑定 · 游戏 · 图像 · KDELibs · 多媒体 · 网络 · 个人信息管理 · Kdepimlibs · 软件开发套装 · 玩具 · 工具 · 教育 · 网页开发 · KOffice → Calligra Suite · Extragear

相关

  • 硬木硬木(hardwood),或称硬植木,即为阔叶树材,指由被子植物门的树所生成的木材。硬木与又称做软木的针叶树材刚好成一对比。硬木一般密度较高及较硬实,但硬木及软木的真正硬度差异很大
  • 制作公司下面列出的日本动画工作室介绍于过去和现在的组织类似的艺术家工作室,但主要致力于动画及动画电影的生产和销售。这些工作室可能是实际的生产设施或企业实体。这些企业会在国
  • 米莱娜·武科蒂奇米莱娜·武科蒂奇(塞尔维亚语:,1848年5月4日—1923年3月16日),黑山王后(英语:List of Montenegrin consorts),尼古拉一世的妻子。米莱娜与尼古拉的父亲是好友,在他们的安排下,米莱娜被
  • 乔尔·金纳曼查尔斯·乔尔·努德斯特伦·金纳曼(英语:Charles Joel Nordström Kinnaman,1979年11月25日-)或简称乔尔·金纳曼(英语:Joel Kinnaman),是一名拥有瑞典和美国双重国籍的男演员。他较
  • 倭美岱类赞倭美岱·类赞(藏文:.mw-parser-output .uchen{font-family:"Qomolangma-Dunhuang","Qomolangma-Uchen Sarchen","Qomolangma-Uchen Sarchung","Qomolangma-Uchen Suring","Qom
  • 益山浦项高速公路 */?),是连接韩国全罗北道益山市和庆尚北道浦项市的一条高速公路。目前分为东西两段;西段益山市至长水郡的61公里路段,东段为大邱广域市东区至浦项市的69.2公里路段。2001年起分段通车,新万金(朝鲜语:새만금 간척 사업)至益山市段及长水郡至大邱广域市段尚在规划中。
  • 飞虎3壮志英雄《飞虎之壮志英雄》(英语:Flying Tiger III),邵氏兄弟国际影业有限公司及优酷讯息技术(北京)有限公司共同拍摄制作的时装警匪剧集;由苗侨伟、黄宗泽、吴卓羲、张兆辉、马德钟、陈豪、郭晋安、萧正楠、梁竞徽、王敏德、姚子羚、陈滢及蔡思贝领衔主演,并由朱晨丽、蔡洁及陈炜联合主演,由谢颖总监制,乐易玲、查传谊、李惠民及刘佳莉监制。出品人为戴玮及乐易玲。
  • 丁伟志丁伟志(1931年1月-),山东潍县(今潍坊市)人,中华人民共和国历史学家,中国社会科学院近代史研究所研究员、中国社会科学院荣誉学部委员。曾任中国社会科学出版社总编辑、中国社会科学院副院长、中国史学会副会长。出生于山东潍县。1949年加入中国共产党。1955年中央马列学院哲学专业研究生毕业,先后在中央政治研究室、马列主义研究院、河北省委组织部工作。1973年进入中国科学院近代史所参与《中国通史》的编写工作。1975年起,陆续担任《历史研究》副主编,《中国社会科学》杂志副总编辑、总编辑,中国社会科学出版社总
  • 周孟初周孟初(1963年10月31日-),男,浙江东阳人,华裔自动化学者。新泽西理工学院杰出教授、澳门科技大学教授。主要从事佩特里网研究。1963年生于浙江省东阳县,1978年就读于巍山中学。1983年毕业于华东工程学院,1986年获北京工业学院自动控制专业硕士学位,在第五机械工业部计算机应用研究所工作。1987年赴美国留学,1990年获伦斯勒理工学院计算机与系统工程博士学位。同年担任新泽西理工学院助理教授,1995年晋升为副教授。创办并主持了离散事件系统实验室。1998年受聘为中华人民共和国教育部第八批“长江
  • 森尾由美森尾 由美(别名河合 由美)(1966年6月8日-),是日本女性声优及演员。埼玉县草加市出身。所属事务所为Stardust Promotion。