1. Qt概述
1.1. qt简介
Qt是一个1991年由Haavard Nord和Eirik Chambe-Eng开发的跨平台C++图形用户界面应用程序开发框架。发展至今,它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt 同Linux上的 Motif,Openwin,GTK 等图形界面库和Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。但它对比其他做界面的软件会比较容易使用和学习。
Qt 是一个跨平台的C++应用程序框架,支持Windows、Linux、Mac OS X、Android、iOS、Windows Phone、嵌入式系统等。也就是说,Qt 可以同时支持桌面应用程序开发、嵌入式开发和移动开发,覆盖了现有的所有主流平台。你只需要编写一次代码,发布到不同平台前重新编译即可。
Qt 不仅仅是一个GUI库,它除了可以创建漂亮的界面,还有很多其他组件,例如,你不再需要研究STL,不再需要C++的头文件,不再需要去找解析XML、连接数据库、Socket 的各种第三方库,这些 Qt 都已经内置了。
Qt 是应用程序开发的一站式解决方案!Qt 虽然庞大,封装较深,但它的速度并不慢,虽不及MFC,但比Java、C#要快。Qt 程序最终会编译成本地代码,而不是依托虚拟机。Qt家族工具丰富,目前还包括QT Creator, QtEmbedded,Qt Designer快速开发工具,Qt Linguist国际化工具等部分。
Qt非常适合跨平台开发领域,是C++程序员第二要掌握的主流开发工具(第一当然是Visual C++啦)。 Qt的官网是,最新版本可以从官网上下载,当前最新版本是Qt 5.12。
今晚推荐Qt编程好书:
1.2. 发展历程
* 1991 Haavard Nord和Eirik Chambe-Eng开始开发将会支持X11和Windows的Qt
* 1994 Qt Company成立
* 1996 KDE项目由MatthiasEttrich创建(Matthias现为诺基亚Qt发展框架工作)
* 1998 Apr 05Trolltech的程序员在 5 天之内将 Ne 从Motif移植到 Qt 上
* 1998 Apr 08 KDE Free Qt 基金会成立
* 1998 Jul 09 Qt 1.40 发布
* 1998 Jul 12 KDE 1.0 发布
* 1999 Mar 04QPL1.0 发布
* 1999 Mar 12 Qt 1.44 发布
* 1999 Jun 25 Qt 2.0 发布
* 1999 Sep 13 KDE 1.1.2 发布
* 2000 Mar 20 嵌入式Qt 发布
* 2000 Sep 06 Qt 2.2 发布
* 2000 Oct 05 Qt 2.2.1 发布
* 2000 Oct 30 Qt/Embedded 开始使用GPL宣言
* 2000 Sep 04 Qt free edition 开始使用 GPL
* 2008 Nokia从Trolltech公司收购Qt,并增加LGPL的授权模式
* 2011 Digia从Nokia收购了Qt的商业版权,从此Nokia负责Qt on Mobile,,Qt Commercial由Digia负责
* 根据最新消息,NOKIA已经停止Meltemi系统开发,Qt部门被解散
* 2012 Aug 09 作为非核心资产剥离计划的一部分,诺基亚宣布将Qt软件业务出售给芬兰IT服务公司Digia。
* 2013年7月3日,Digia公司Qt开发团队在其官方博客上宣布Qt 5.1正式版发布。
* 2013年12月11日,Digia公司Qt开发团队宣布Qt 5.2正式版发布。
* 2014年4月,Digia公司Qt开发团队宣布Qt Creator 3.1.0正式版发布。
*2014年5月20日,Digia公司Qt开发团队宣布Qt 5.3正式版发布。
1.3. QT优点
Qt是一个跨平台的C++图形用户界面应用程序框架,提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt很容易扩展,并且允许真正地组件编程。Qt与GTK、KDE、MFC,OWL,VCL,ATL是一样的图形界面库。QT优点如下:
(1)优良的跨平台特性
Qt支持下列操作系统: Microsoft Windows,Linux,Solaris, SunOS, HP-UX, Digital UNIX (OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。
(2)面向对象
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说非常方便。 Qt提供了一种称为SIGNALs/slots的安全类型来替代 callback,使得各个元件之间的协同工作变得十分简单。
(3)丰富的API
Qt包括多达250个以上的C++类,还提供基于模板的collections, serialization,file,I/O device,directory management,date/time类。
(4)支持2D/3D图形渲染,支持OpenGL
(5)大量的开发文档
1.4. Qt和MFC的比较
当今基于C++的图形界面开发领域,能与qt相抗衡的也只有MFC,MFC是微软的小弟,自然得天独厚,比如开发深层次的Windows应用,MFC当然远超qt,但qt也有杀手锏,那就是跨平台。这两点大家一目了然。下面,我们再来比较它们其它的特点。
(1)开发速度
整体来说可能MFC会快捷一些,因为windows平台的开发工具大多很智能,因为立足于windows的开发人群很广,从菜鸟到专业人士(开发人员一多,技术参考就多,周围可以问问题的人就多),但是QT由于基于Linux,可用的开发工具不多,大都比较专业,多是第三方产品,而且集成度不大,第三方库也没有MFC的多,从这一点MFC略胜一筹,但是QT自从被Nokia收购后,官方发布了跨平台集成开发环境QTCreator,所以之后走向就不好说了,个人总体感觉QT Creator和VS差距比较大,还需改进
但是从库本身来说QT集成的功能较MFC庞大,而且使用的封装技术信号和槽也是比较受到赞许的,比如QT Script为QT提供嵌入式脚本,QT界面库支持CSS,所以QT做出来的界面比MFC要好,而且比较容易,MFC就需要借助第三方库了。因为MFC是浅层封装(最新的2008 sp1加入了BCG的高级界面库,可能有所改善)windows SDK,以降低使用windows SDK引起的开发效率的降低,和开发难度的增加。所以QT库是比MFC优秀的,两个库都经受了时间的考验,稳定性都很高,Bug几乎没有
(2)运行效率
MFC由于其浅层封装的特点,所以运行效率是比较高的,加上vc对windows的针对性优化,整体性能是比较高的,但是如果加入第三方库就不敢保证了。QT因为库比较庞大,封装层次较深,所以运行效率较MFC为低,但是在现在的机器配置下,这些会引起人们的介意吗?(C#大家都不介意了)
(3)应用范围
现在windows的普及范围谁能比过,所以MFC的客户量比较多,QT主要是Linux下的开发人员在使用,但MFC也只是得益于windows(感觉又是一次捆绑战略),MFC不支持嵌入式开发(主要指手机平台),但是QT有对应的模块,虽然这一手机开发领域被Java碾压,但总归是有的。
(4)学习难度
QT的封装哲学比较明晰,和系统隔离的比较好,所以个人感觉门槛不高。MFC较难精通,因为深入开发之后SDK还是要了解的,否则程序感觉比较儿童化。
(5)伪对象 vs 真对象
归根结底,Qt和MFC的差异在于其设计的差异。MFC的根本目的是访问包装起来的用C语言写的windows的API。 这绝非好的面向对象的设计模式,在很多地方,你必须提供一个包含15个成员的C语言的struct,但是其中只有一个与你所期望的相关,或者必须用旧式的参数来调用你的函数。MFC还有许多让人摸不着头脑的地方,函数名没有任何的连续性。比如,如果你创建了一个graphical类,直到调用了creat()以后该类才会被创建。然而对dialogs,必须要等到OnInitDialog()才能创建这个对象。奇怪的是到了views,创建该类的函数名竟然成了OnInitUpdate(),......你自己创建一个类用他们的方式调用它,你的程序崩溃了。
(6)消息循环
MFC是事件驱动的架构。要执行任何操作,都必须是对特定的消息作出响应。Windows对应用程序发送的
信息数以千计,遗憾的是,要分清楚这些分繁芜杂的消息是很困难的,并且关于这方面的文档并不能很好的解决这些问题。
Qt的消息机制是建立在SIGNAL()发送和SLOT()接受的基础上的。这个机制是对象间建立联系的核心机制。利用SIGNAL()可以传递任何的参数。他的功能非常的强大。可以直接大传递信号给SLOT(),因此可以清楚的理解要发生的事情。一个类所发送的信号的数量通常非常的小(4或者5),并且文档也非常的齐全。这让你感觉到一切尽在掌握之中。SIGNAL/SLOT机制类似于Java中listener机制,不过这种机制更加轻量级,功能更齐全。(这种机制确实貌似简单清晰了一些)
(7)创建界面
MFC无法创建大小动态可变的子窗口 ,必须重新手动修改代码来改变窗口的位置(这恰好解释了为什么windows里的dialog是不可以改变的)这个问题在软件进行国际化翻译的时候更加严重,因为许多国家表达相同意思需要更长的词汇和句子,必须要对每个语言的版本重新修改自己的软件。
在Qt中,任何东西都可以手动的敲出来,因为它很简单:为了得到一个button,可以这样些button = new PushButton( "buttonName", MyParentName );如果想在按下某个按钮以后想调用某断代码的执行,可以这样写:connect( button, SIGNAL( clicked() ), qApp, SLOT( action() ) );Qt拥有非常简单而又不失强大的layout机制,以至于不使用它就是在浪费时间了。
Qt还提供了一个图形用户工具,Qt Designer,可以用来帮助建立用户界面。可以修改所使用的任何控件的属性。不用将他们放在严格的位置,可以通过layout完美的组织他们。
这个工具所产生的代码我们是可以实际上阅读并且可以理解的。生成的代码单独放在一个文件里,在编程的同时,你可以随心所欲的多次重新生成用户界面。
Qt Designer可以让你完成许多在MFC中不可能完成的任务,比如用预先填好的生成listview,在每个tab上用不同的view来使用tab 控制。(界面方面Qt确实很好很强大)
(8)帮助文档
用户选择图形开发环境的时候,帮助文档是否周全是左右其选择的重要因素。Visual的开发环境的帮助文档MSDN(这个还要单独掏钱购买)非常的庞大,有10个CDROM光盘。他包罗万象,涵盖广泛。但是难免有泥沙俱下,主题模糊,关键信息不突出的遗憾。其链接设计的也很糟糕,通过链接很难从一个类跳转到其父类或者子类以及相关的类。如果你搜索一个关键字,不管是Visual C++, Visual J++, Visual Basic,只要包含这些关键字的信息统统的返回来。
Qt的文档设计的相当优秀。你可以到上面一睹芳容。Qt的文档完备且详细的覆盖了Qt的方方面面,竟然仅有18M。每一个类和方法都被详尽描述,巨细靡遗,举例充实。通过Trolltech公司提供的链接或者是Qt Assistant工具,可以方便的从一个类或者方法跳转到其他的类。文档还包含了一个初学者教程和一些典型应用的例子。同时还提供了FAQ和邮件列表,方便通过Internet或者用户群来查阅。如果你购买了授权,在一天之内你将会得到Trolltech公司的技术支持。实际上,Qt优秀的帮助文档使得寻求外部帮助的机会大大减少。Tolltech公司的一个宗旨是:有如此优秀的Qt产品以及其帮助文档,技术支持是多余的。
MSDN用熟了很好用,很全面,相关的背景知识,例子都能找到。而且网上还有丰富的例程可以参考。仅凭Qt的帮助文档绝对不足以解决所有问题,而网上我只找了个Qt中文论坛,提过几个问题,有的给出了解决办法,有的也没人回答,还要靠自己试。
(9)unicode
使用MFC,如果要显示unicode,在编译链接的时候必须用到特殊的参数(和改变可执行文件执行的入口),必须在每个string前面加上T,将char修改成TCHAR,每个字符串处理函数(strcpy(), strdup(), strcat()...... )都要改变成另外的函数名。更令人恼火的是支持Unicode的软件竟然不能和不支持Unicode的DLL一起工作。这是个很严重的问题,但是你毫无选择。
使用Qt,字符串用QString来处理,其本身是与生俱来的Unicode.不需要改变什么东西。不要在编译/链接时候增添参数,不要修改代码,只需要使用QString就可以了。QSting类功能强大,你可以广泛的使用它,并且不要担心Unicode问题。这使得转换为Unicode非常的方便。QSting提供了转换为char * 和UTF8的函数。显然,MFC的CString的设计相比于Qt的QString设计有着巨大的不同。CString以char *为基础提供了很少的功能。它的优点是当需要char *类型的时候,可以直接使用CString类型。乍看起来这个好像是个优点,其实实质上还是有很大的缺陷的,特别是可以直接修改char * 而不要更新类。在转变为Unicode的时候这个也碰到很大的麻烦。(CString随编译选项可以是Unicode版)相反,QString在内部以unicode存储string,需要时提供char *功能。实际上很少用到char *,因为整个Qt的API用文本的方式响应QString参数。QString还附带许多其他的功能,比如自动分享QString的内容。这是一个非常强大的类,你会喜欢在很多地方用它的。
(10)国际化
使用MFC是可以国际化的,但是需要将每一个字符串放在一个字符串表中,在代码中到处使用LoadString(IDENTIFIET)。然后转化这些资源到DLL中,翻译字符串到所需要的语言,改变图形界面,然后调用程序使用这个DLL。整个过程是如此的繁琐,可谓牵一发而动全身。考虑的事情要面面俱到。
使用Qt的时候,只需要将字符串置于函数tr()中,在程序开发中这算是举手之劳。可以直接在代码中改变字符串的参考。Qt Linguist,Qt的一个工具,能够提取所有待翻译的string并按照友好的界面显示出来。这个用户界面非常适合翻译,使用字典,显示字符串内容,恰当的unicode显示,快捷方式冲突检测,检测未翻译的字符串,检测字符串修改情况,功能齐全。这个软件可以供没有任何编程经验的翻译者使用。同时该软件在GPL的版权下发布,可以按照你的需求来修改它。翻译以后的文档保存在XML中,适合软件复用的原则。为软件增加一种新的语言版本仅仅是用Qt Linguist产生一个新的文件而已。(这点Qt做的很不错。)
(11)resources问题
使用MFC,一部分开发过程要依靠“resources”,在很多的案例中开发者必须使用他们。这样会导致如下的后果:出了Visual Studio,你很难使用其他的工具来完成开发。 资源编辑器仅有有限的功能,比如:通过Dialog编辑器不可能改变所有的属性,一些属性可以改变,另一些属性则不可能改变。(译者注:下面还有两条陈述MFC缺点的实例,但我感觉这些已经够说明问题了,暂时删节不译)
然而Qt并没有资源的概念,这就解决了以上所提到的问题。Qt提供了一个脚本使得能将编入你的代码。对于界面设计,Qt Designer则创建了可读的代码。 (Qt Designer设计界面很不错)
(12)价格
一旦你购买了Visual Studio,你将免费的获得MFC SDK。Qt在UNIX上是可以免费获得其遵守GPL版权的版本(现在在windows 上也可以免费获得其GPL版本)。如果要开发不公开源代码的软件,必须购买Qt的授权。在特定平台下,每个开发者购买一个永久性授权,并获得一年的技术支持。
(13)发布
在发布基于MFC的软件时,必须依靠存在于客户电脑上的MFC。但是这是不安全的,同样是MFC42.dll,可以基于相同的库得到3个不同的版本。通常,需要检查是否拥有正确的MFC42.dll版本,如果不是,就升级它。但是升级MFC42.dll会改变很多软件的行为。这让我感到很不舒服,如果用户在安装我的软件以后导致其机器死机该怎么办?
Qt则没有这个风险,因为Qt压根就没有“升级整个系统”这个概念。(如果不是一个版本的Qt,还是会有问题的)
1.5. Qt的主要应用领域
Qt是使用的语言是C++,所以C++能做的领域,Qt都适合。而且Qt还支持手机开发,所以Qt的应用场合非常广。qt常见的应用领域有军工软件行业(在国内这是第一大应用领域)、游戏(比如极品飞车)、服务端开发、数字图像处理、虚拟现实仿真(比如Google地球)、嵌入式系统的界面、跨平台开发等等。
总而言之,学好C++和Qt,走遍天下都不怕。下面列举了Qt成功开发的著名软件。
3DSlicer, a free open source software for visualization and medical image computing
AcetoneISO:镜像文件挂载软件
Adobe Photoshop Album,一个图像组织应用程序 [35]
Arora:一款跨平台的开源网页浏览器
Autodesk MotionBuilder, 三维角色动画软件
Autodesk Maya, 3D建模和动画软件
Avidemux, a Free Software program designed for multi-purpose video editing and processing
Avogadro:高级分子编辑器
Ba:暴雪公司开发的游戏对战平台
BOUML,一个免费的统一建模语言工具箱
Bitcoin:比特币
chmcreator:开源的chm开发工具
CineFX:一款跨平台、开源、免费、影片剪辑,特效与合成套装
CoCoA, a software for computations in commutative algebra
Dash Express, an Internet-enabled personal navigation device
DAZ Studio, a 3D figure illustration/animation application
Doxygen:API文件产生器
EAGLE, tool for designing printed circuit boards(PCBs)
EiskaltDC++, a program that uses the Direct Connect protocol.
Emergent:神经网络模拟器。
, a software product for the simulation of electromagnetic fields
eva:Linux版QQ聊天软件。
FreeCAD, a free and open source 3D-Solid and general purpose design CAD/CAE
FreeMat:一个自由开源的数值计算环境和编程语言
Full Tilt Poker, one of the most popular online poker programs
Gadu-Gadu:实时通信软件
Gambas, A free development environment based on a Basic interpreter
GoldenDict:一款开源的字典软件
Google地球(Google Earth):三维虚拟地图软件。
GNS:Cisco网络模拟器。
Guitar Pro 6, a tablature editor
刺猬大作战:一个基于百战天虫的开源游戏。
Hydrogen, an advanced drum machine
ImageVis3D, a volume ray-casting application
Ipe:自由的矢量图形编辑器
ISE Webpack, a freeware EDA tool for Windows and Linux developed by Xilinx
Kadu, a Polish instant messenger using the Gadu-Gadu protocol
KDELibs:一个许多KDE程序都使用的共享库,如Amarok、K3b、KDevelop、KOffice等。
KeePassX, a multi-platform port of KeePass, an open source password manager for Microsoft Windows
Launchy:一个开放源代码的快捷启动器
LMMS:一个开放源代码的音乐编辑软件
LyX:使用Qt作为界面的LaTeX软件。
Mathematica:Linux和Windows版本使用Qt作为GUI
Maxwell Render,a software package that aids in the production of photorealistic images from computer 3D model data
Mixxx:跨平台的开放源代码DJ混音软件
MuseScore,一个WYSIWYG的乐谱编辑器
MythTV:开源的数字视频录制软件。
Nuke, a node-based compositor
PDFedit:自由的PDF编辑器
PokerTH, an open source Texas hold 'em simulator
Psi:一款XMPP网络协定的实时通信软件
qBittorrent:自由的BitTorrent P2P客户端
QCad:一个用于二维设计及绘图的CAD软件
Qjackctl, a tool for controlling the JACK Audio Connection Kit
QSvn, a GUI Subversion client for Linux, UNIX, Mac OS X and Windows
Opera:著名的网页浏览器。
Qt Creator, the free software cross-platform integrated development environment from Nokia
Qterm:跨平台的BBS软件。
Quantum GIS:自由的桌面GIS
Quassel IRC:跨平台的IRC客户端
RealFlow, a fluid and dynamics simulator for the 3D industry
Recoll:桌面搜索工具
Rosegarden, a free software digital audio workstation program
SciDAVis, a cross-platform plotting and data analysis program
Scribus:桌面排版软件。
Skype:一个使用人数众多的基于P2P的VOIP聊天软件。
SMPlayer:跨平台多媒体播放器
Spotify, music streaming service.
Stellarium:一款天文学的自由软件
TeamSpeak:跨平台的音效通信软件
Texmaker:一款跨平台的开放源代码LaTeX编辑器
TeXworks, It is a graphical user interface to the typesetting system TeX.
TOra, a database administration tool[36]
UniversalIndentGUI,an application which helps the user to beautify, reformat or indent various kinds of code.
Valknut,a program that uses the Direct Connect protocol
VirtualBox:虚拟机软件。
VisIt:一个开源型交互式并行可视化与图形分析工具,用于查看科学数据。
VisTrails, a scientific workflow management and visualization system
VLC多媒体播放器:一个体积小巧、功能强大的开源媒体播放器。
VoxOx, a unified communications software.
WordPress, based on Qt for Maemo and Symbian
wpa supplicant, a free software implementation of an IEEE 802.11i
Xconfig:Linux的Kernel配置工具
咪咕音乐:咪咕音乐是中国移动倾力打造的正版音乐播放器
WPS Office:金山软件公司推出的办公软件
极品飞车:韩国Gameloft游戏公司出品的著名赛车类游戏
1.6. Qt的版本
Qt可以分为商业版和免费版。商业版又分为专业版和企业版。Qt免费版是Qt的非商业版本,开源。可以免费下载,但要基于GPLv3协议使用。
对于我们学习者来说,当然是使用免费版了。
当前,Qt的最新版是 5.12 LTS(长期支持版本),于2018年12月6日正式发布。这是一个长期支持版本(LTS),官方将提供为期三年的支持。自上一个 LTS版本Qt 5.9.7发布以来,官方一致专注于提升软件质量,修复了2000多个bug,若从Qt 5.6.3算起已经修复了5000多个bug。当然这只是个开始,在即将到来的补丁中,官方将持续提升Qt 5.12的质量。
和其他主要版本一样,Qt 5.12 LTS也包含了许多新特性。下面让我们聊聊其中的几个亮点。
(1)新的模块和平台
Qt现在完全支持Qt for Python,让Python开发者可以使用各种Qt API。目前,您可测试其技术预览版,正式版本将在Qt 5.12之后不久发布。Qt for Python源自我们多年来一直在q上托管的PySide项目。Qt for Python把大多数Qt C++的API开放给Python开发者使用。简而言之:Python开发者现在也可以创建复杂的图形化应用程序和用户界面。Python开发者的福音啊。
学过MFC开发的朋友知道,MFC可以生成ActiveX控件,然后可以放到网页中使用。Qt目前也有这样的功能,Qt 5.12包含Qt for WebAssembly的第二个技术预览版。使用Qt for WebAssembly,您可以编译Qt应用程序,并可在任何现代Web浏览器中运行。虽然Qt for WebAssembly仍被标记为技术预览版,但它的功能非常强大。貌似,现在开发工具不支持网页插件都不好意思出来混,可以看出,Qt在努力的追赶着MFC。
除了支持Python和WebAssembly这两个新平台之外,Qt 5.12还完全支持了两个原来的技术预览模块:
Qt Remote Objects使Qt进程之间的通信变得天衣无缝。它允许将QObject的属性,信号和槽暴露给另一个进程,且这两个进程可以运行在不同设备上。
Qt WebGL Streaming Plugin是另一个现在完全支持的插件。此插件允许您通过网络将应用程序的用户界面流式传输到任何现代浏览器。
(2)Qt QML和Qt Quick
在新版本中,我们对QML中的JavaScript引擎进行了一些重大改进。它从兼容ECMAScript 5升级到现在完全支持ECMAScript 7。现在可以使用最新的JavaScript了,同时也方便了第三方JavaScript库的集成。现在还支持ECMAScript模块,可以从C ++和QML / JS加载。
我们已经在Qt Quick中添加了另一种Item View,即TableView。它比之前QQC1中的实现更高效,并填补了我们View控件中最后一个重要空白。Qt Quick Controls 2中的许多控件还扩充了新方法和新功能。
Qt 5.11的Pointer Handlers现在改名为Input Handlers,它已经正式发布,并成为Qt Quick中的重要功能。Input Handlers模块简化了复杂触摸交互的设计,过去使用MouseArea或TouchArea模块做复杂交互时非常困难。另外,我们还添加了两个新的Input Handlers用于悬停和拖动项目。
Qt Quick现在支持预生成的distance field textures。这些纹理包含在字形(glyph)中,并用于在Qt Quick中渲染文本,在编译时预生成它们有助于提高应用程序启动性能,尤其是在低端嵌入式设备上。
(3)Qt Core和Qt Network
Qt Core获得了对CBOR(简明二进制对象表示)的支持,这是一种类似于JSON的二进制格式,但它允许更多的数据类型和灵活性。
新颁布的Qt改进了QRegularExpression以支持通配符匹配,我们现在可以弃用旧的QRegExp类了。
在Qt Network中,我们添加了DTLS over UDP的支持。在macOS和iOS上,我们现在通过TransportSecurity后端,可以支持ALPN和HTTP / 2,并且我们在通用SSL后端中添加了PKCS#8支持。
(4)Qt Gui和Widgets
在Windows上,Qt现在支持Windows UI自动化,允许基于Qt的UWP应用程序与各种可用的可编程的UI控件工具进行交互。Qt使用统一的Windows Pointer Input Messages(在Windows 8或更高版本中支持)替换了平板电脑、触摸屏、触摸板或鼠标中的输入实现。现在新增一些硬件的支持,如MS Surface系列中的screen digitizer,而不再需要定制的驱动。
新版本Qt为QGradient添加了许多预定义的渐变(参考)。QImage支持RGBA64图像格式,每个颜色通道16位。这些信息可以从PNG或TIFF的文件中读取,并上传到OpenGL或从OpenGL中获取。
最后,新版本Qt还修复了Qt Widgets中的大量bug。
(5)其它更新
Virtual keyboard现在支持13种额外的键盘布局以及MyScript手写识别功能。它现在带有一个公共扩展API,允许您定义自己的布局。
Qt Location现在包含一个升级的MapBox插件和几个小的API增强功能。我们已将Qt WebEngine升级到Chromium 69,并获得对客户端证书的支持。
Qt for Automation现在更新了新版的KNX和MQTT模块,他们支持最新版本的协议。并且作为技术预览版本,我们添加了对OPC / UA的支持。
另外,即将推出的Qt 3D Studio 2.2 Studio也将基于Qt 5.12 LTS。
最后,Qt 5.12还附带了新版本的Qt Crea。
总而言之,Qt 5.12值得你学习和拥有!
#编程##程序#