Qt简介 及与MFC、GDK+的比较-程序员宅基地

技术标签: 开发工具  操作系统  嵌入式  

Qt

  C++图形用户界面应用程序开发框架。

Qt的由来和发展  

1、QT由来
  Haavard Nord 和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 的未来。
2、Qt特性
  本质上来说, Qt是一个跨平台的C++应用程序开发框架,有时又被称为C++部件工具箱。Qt被用在KDE桌面环境、Opera、Google Earth、Skype、Adobe Photoshop Album和VirtualBox的开发中。它是诺基亚(Nokia)的Qt Development Frameworks 部门的产品。使用 Qt ,只需一次性开发应用程序和用户界面,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有下列优点:
a) 优良的跨平台特性:
  Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。
b) 面向对象
  Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。
c) 丰富的 API
  Qt 包括多达 250 个以上的 C++ 类,还替供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理 功能。
d) 支持 2D/3D 图形渲染,支持 OpenGL
e) 大量的开发文档
f) XML 支持
  近诺基亚发布了Qt 4.6——新版的跨平台应用程序和用户界面框架。Qt 4.6 对全新平台提供支持,具有强大的全新图形处理能力并支持多点触摸和手势输入,让高级应用程序和设备的开发过程变得更加轻松和快乐。
诺基亚应用服务和框架副总裁Sebastian Nystrom说:“不论是什么样产品设计或开发平台,Qt 4.6的发布对开发人员来说都是一件令人兴奋的事。”
“开发人员可以轻而易举地为桌面平台或设备(包括数亿部基于Symbian 和 Maemo系统的设备)开发出具有视觉美感和网络连接功能的应用程序。”
Nystr?m补充说:“开发人员将非常喜欢使用Qt直观的编程界面,快速开发出功能强大、外表美观的应用程序。”
更多平台
  Qt 4.6 首次包含了对Symbian 平台的支持,并在其所支持的平台中新增了 Windows 7、Apple Mac OS 10.6 (雪豹) 和即将上市的Maemo 6。此外还为实时操作系统QNX 和 VxWorks提供了网络社区支持。对Maemo 5 的支持目前也已进入研发阶段,其技术预览版第二版已于今日发布。
  Qt 对 Symbian 和 Maemo 的支持首次为开发人员创造了使用同一代码库同时针对这两个平台进行开发的机会。能够跨平台分享代码就意味着开发人员所开发的应用程序上市的速度将更快,影响的设备用户群将更广。
  Qt Mobility项目下的全新Qt API技术预览版也于今日同时发布。这些跨平台的API为开发人员提供了多种功能,如导航类设备的定位功能,以及信息发送和接收、联系人和网络连接管理等。
外观更炫
  Qt 4.6是在4.5图形增强功能的基础上创建的,进一步强化了这些图形功能,添加了全新的动画框架(Animation Framework)——包括直观的状态机功能——以及全新的高级图形功能,如不透明、阴影、闪光和滤镜等。
使用手指
  Qt4.6令人兴奋的新功能之一就是可以创建多点触摸应用程序。这种全新的基于多触点和手势的输入法(如轻触和动力滚动)使Qt4.6框架的功能更为强大,用户可以通过触觉以动态的方式与应用程序和设备进行互动。
性能更强
  传统软件开发观点认为高级用户界面功能的获得通常是以性能严重受损作为代价的。Qt 4.6 对此观点提出了挑战,为此投入大量工作,既要获得佳性能,又要能让开发人员所开发的产品达到用户所要求的“令人惊叹”的效果。
性能提升主要包括:一个经过高度优化、重新编写的 Qt GraphicsView 渲染算法、一个全新的 OpenGL 绘图引擎、WebKit、使用 OpenVG 对 2D 矢量图形的支持,以及对全新 DirectFB 的支持。
新工具
  在发布 Qt 4.6 的同时,作为 Qt 开发跨平台 IDE 的 Qt Creator 也发布了更新版本。Qt Creator 1.3 和 Qt 4.6共同构成的 Qt SDK,包含了开发跨平台应用程序所需的全部功能。(来自programbbs)
3、用QT能做什么?
在QT的官方网站谈到了15年来取得了的成就,它帮助世界各地和各个行业组织开发出先进的高度创新的应用和设备。
使用Qt,众多的开发商和公司已经能够:
        ●    减少了近50%的开发时间。
        ●    加速了50%的开发速度由于代码可维护
        ●    减少了50%的代码量
Qt的用户怎么说?
        ●    94%报告说,Qt的满足或超过其发展的期望
        ●    92%会向他人推荐使用Qt
        ●    76%报告因为使用Qt,生产率提高
Qt的应用领域:
  有很多出名的例子是都是使用Qt开发的。例如: Arora(一款跨平台的开源网页浏览器 )、eva(Linux版QQ聊天软件)、FreeMat(一个自由开源的数值计算环境和编程语言 )、Gadu-Gadu(即时通信软件 )、Google地球(Google Earth)(三维虚拟地图软件)、ImageVis3D 、KDE(著名的桌面环境)、Elibs(一个许多KDE程序都使用的共享库,如Amarok、K3b、KDevelop、KOffice等)、Last.fm播放器(著名的互联网音乐社区网站的桌面客户端)、Motorola A760(UI 以 Qt/Embedded 建构) 、MythTV9(开源的数字视频录制软件)、Opera(著名的网页浏览器)、Qterm(跨平台的BBS软件)、Qt Extended、Quantum GIS、Skype(一个使用人数众多的基于P2P的VOIP聊天软件)、SMPlayer(跨平台多媒体播放器 )、TeamSpeak(跨平台的音效通信软件) 、Tlen.pl:波兰人发明的 instant messaging client TOra 、VirtualBox(虚拟机软件)、Xconfig(Linux的Kernel配置工具) 、chmcreator(开源的chm开发工具)……
 
Qt是一个跨平台图形库,MFC是WINDOWS API封装的C++形式,GTK+是 LINUX下桌面系统比较通用的库。
 
QT与MFC的简单比较:
 
QT的应用主要在Linux下,但是它本身是跨平台的,也支持其他操作系统,是现在比较著名的界面库,著名的KDE就是使用QT开发的。MFC是提供给VC的,但是它主要是代码库,不像VCL和编译器挂钩很多,但是MFC主要是对windows API的封装,所以只能用于windows平台
根据你所说的方面,简单比较一下:
1.开发速度
  整体来说可能MFC会快捷一些,因为windows平台的开发工具大多很智能,因为立足于windows的开发人群很广,从菜鸟到专业人士,但是QT由于基于Linux,可用的开发工具不多,大都比较专业,多是第三方产品,而且集成度不大,第三方库也没有MFC的多,从这一点MFC略胜一筹,但是QT自从被Nokia收购后,官方发布了跨平台集成开发环境QTCreator,所以之后走向就不好说了,个人总体感觉QT Creator和VS.net差距比较大,还需改进
  但是从库本身来说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有对应的模块
4.学习难度
  QT的封装哲学比较明晰,和系统隔离的比较好,所以个人感觉门槛不高
  MFC较难精通,因为深入开发之后SDK还是要了解的,否则程序感觉比较儿童化,呵呵
 
QT与GTK+的简单比较: 
 
  虽然Linux下的大多数开发是基于字符界面的,但在Linux环境下也可以开发出美观大方的图形界面。经过多年的发展,目前已经存在多种用于在Linux下开发图形界面程序的开发包,其中较为常用的是Qt和GTK+。 
  Qt是一个跨平台的图形用户界面开发库,它不仅支持Linux操作系统,还支持所有类型的UNIX以及Windows操作系统。Qt良好的封装机制使它模块化程度非常高,可重用性很强,Qt提供了丰富的API供开发人员使用。使用Qt开发的图形用户界面程序具有良好的稳定性和健壮性。桌面环境KDE(K Desktop EnVironment即K桌面环境)就是使用Qt作为其底层库开发出来的。 
  由于Qt使用C++面向对象编程语言作为其开发语言,而许多在Linux下从事开发的程序员更喜欢或更习惯于用C语言。GTK+使用C语言作为开发语言。它基于LGPL授权,因此GTK+是开放源代码而且完全免费的。GTK+简单易用,执行效率高。基于这些原因,GTK+拥有为数众多的拥护者。Linux的桌面环境GNOME就是建立在GTK+基础上。

转载于:https://www.cnblogs.com/mingyoujizao/p/9547563.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dnue63037/article/details/101453765

智能推荐

软件测试工程师学习笔记8 - 入门篇-程序员宅基地

文章浏览阅读391次,点赞3次,收藏4次。软件测试工程师学习笔记 -8入门必读1. 测试基础2. 测试设计3. 缺陷管理4. 项目实战1) 项目介绍2) 项目功能测试3) 明确需求后如何开测4)案例编写入门必读基础入门目标五天结束,能独立完成功能测试过程。1. 测试基础详见软件测试工程师学习笔记 -42. 测试设计详见软件测试工程师学习笔记 -43. 缺陷管理详见软件测试工程师学习笔记 -5详见软件测试工程师学习笔记 -64. 项目实战HTML部分详见软件测试工程师学习笔记 -71) 项目介绍项目背

Python基础学习——数据结构(第二讲:列表;主讲:列表创建、追加元素、插入元素、替换元素、删除元素、其他常用方法、列表推导式)_列表推导式替换-程序员宅基地

文章浏览阅读726次。列表也是一种序列结构,与元组不同,列表具有可变性,可以追加、插入、删除和替换列表中的元素。_列表推导式替换

命名管道的程序:无法打开与SQL Server的连接 【53】_命名管道提供程序: 无法打开与 sql server 的连接 [53].-程序员宅基地

文章浏览阅读1.2w次。在建立好一个关于销售的数据仓库后,然后来进行数据的多维分析而创建了SSAS来进行分析,在设置好数据源之后,进行数据源视图的创建,但是在创建数据源视图的时候出现:登陆超时已过期建立到服务器的连接时发生错误。连接到SQL Server2005时,默认设置SQL Server不允许远程连接这个事实可能导致失败。命名管道的程序:无法打开与SQL Server的连接 【53】or链接_命名管道提供程序: 无法打开与 sql server 的连接 [53].

谷歌账户二次验证_为您的Google帐户和Microsoft帐户设置双重身份验证-程序员宅基地

文章浏览阅读4.9k次。谷歌账户二次验证I use Two-Factor Authentication for my Google Apps account and I use the Google Authenticator application on my iPhone to generate the second factor. 我对我的Google Apps帐户使用了双重身份验证,并且在iPhone上使用了Go..._second factor 互联网

R语言练习题答案(1)_r语言实用教程课后答案-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏10次。第一章R语言概述#代码 1-1install.packages(“installr”)require(installr) #load / install+load installrupdateR()#代码 1-2a <- ‘Hello world!’a‘Hello world!’ -> bbplot(1:10, col = ‘red’) # 此时,参数设置使用=#代码 1-3getwd()my_iris <- read.csv(’.\iris._r语言实用教程课后答案

android跳转页面定位,Android调试技巧—点击Log跳转到指定源码位置-程序员宅基地

文章浏览阅读261次。log的一般用法就不必说了,想必大家都经常用,主要分享一下log的在一些特殊情景下使用。情景1Q: 假如刚接手一个新项目,不熟悉每个界面对应哪个Activity,如何做到快速定位到对应的Activity源码中?A: 首先需要所有的Activity都继承一个自定义的BaseActivity,然后在BaseActivity中的onCreate方法中输出log,指出当前所在界面的Activity:pub..._安卓开发 根据log判断输出位置

随便推点

Ansible批量安装CDH集群:离线_ansible template模块调用报fatal: [local]: failed! => {"-程序员宅基地

文章浏览阅读1.7k次。文章目录1, 规划概览a, 服务拆分:多个小角色b, 目录结构,使用帮助2, 具体操作内容3, 具体模板内容1, 规划概览a, 服务拆分:多个小角色b, 目录结构,使用帮助[vagrant@c7 ansible-cdh-el7-playbook]$ tree.├── ansible7.tar├── group_vars│ └── all├── help.txt├── hosts├── hosts-cdh -> roles/common/files/hosts├── ins_ansible template模块调用报fatal: [local]: failed! => {"msg": "module (ansibl

linux系统取消时间同步,linux下时间同步的两种方法分享-程序员宅基地

文章浏览阅读1.1k次。方法1:与一个已知的时间服务器同步复制代码代码如下:ntpdate time.nist.gov其中 time.nist.gov 是一个时间服务器.删除本地时间并设置时区为上海复制代码代码如下:rm -rf /etc/localtimeln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime方法2:linux自动同步时间vi /etc/cronta..._linux关闭时间同步

计算机网络:基础概念_计算机网络是通信技术的一种,是一种网络通信技术。-程序员宅基地

文章浏览阅读1.8k次。基础概念什么是计算机网络计算机网络是通信技术与计算机技术紧密结合的产物。是一种通信网络。通信系统模型:计算机网络的定义:计算机网络是互连的、自治的计算机集合。互连:通过通信链路互联互通自治:无主从关系交换网络当计算机网络的规模越来越庞大,使用直接的连接是不合适的因此通过交换网络互连主机,即主机连接交换节点(路由器/交换机),通过交换结点传送数据..._计算机网络是通信技术的一种,是一种网络通信技术。

win10 mysql服务无法启动_win10的mysql服务无法启动-程序员宅基地

文章浏览阅读817次。net start mysql无法启动1.可以进入MySQL的bin目录下 mysql --remove2.检查一下自己的my.ini是否配置正确[mysqld]#basedir代表自己MySQL的安装根目录basedir = D:\MySQL\mysql-5.7#datadir代表自己MySQL的数据库保存的目录,如果没有在MySQL安装的根目录下新建一个data文件夹datadir = D:\..._windows10 mysql无法启动

Python爬虫——scrapy-4-程序员宅基地

文章浏览阅读1.6k次,点赞25次,收藏19次。爬取读书网信息到阿里云服务器中的数据库,scrapy的日志问题,scrapy的post请求

mysqlredolog-程序员宅基地

文章浏览阅读47次。mysql是怎么保证事务 server层的binlog和引擎层的redolog 一致的内部xa事务主要是mysql内部为了保证binlog与redolog之间数据的一致性而存在的,这也是由其架构决定的(binlog在mysql层,而redolog在存储引擎层);外部xa事务则是指支持多实例分布式事务,这个才算是真正...