24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1473  |  回复: 2

yalefield

金虫 (文坛精英)

老汉一枚

[交流] 【转帖】彻底超越MFC-->诺基亚的开源GUI库:Qt 已有2人参与

http://www.cnbeta.com/articles/111246.htm
Visual Studio 2003/2005/2008下开发Windows图形界面程序,程序员一直做着抉择:选择.net平台,则意味着需要XP用户安装.net Framework, 而且自己不能手工控制某些代码的优化;选择原生C++/MFC平台,则意味着需要编写繁琐的代码(VS2008甚至裁掉了基于MFC的GUI Designer,所有MFC GUI代码,除IDE内置的可怜的框架外,必须手工产生)。

自从Visual Studio 2002发布以来,微软一直在C++平台推C++向.NET平台的转换,先后推出了Managed C++和其升级版本C++/CLI,而对原生运行的C++一直冷淡,除了更加符合标准之外,几乎没有新的库加入。而同时,开源阵营的C++平台迅速发展。其一是GCC4大幅度提升了编译优化,二进制码质量已经超过了原生编译的Visual C++;其二是一系列开源跨平台的GUI库(例如Qt、WxWidgets、GTK等)的蓬勃发展,已经达到和超过了一代巅峰Visual C++ 6.0(MFC库)的水平了。

下面笔者就向大家简要介绍Qt这个库。

笔者个人认为,在Qt、WxWidgets、GTK三个开源C/C++库中,Qt的设计思路、IDE支持、代码执行速度都达到了较好的(至少,能和微软的Visual C++/CLI媲美)的水平。(GTK是基于C的,也是面向对象风格,比较适合C开发者。)

历史
Qt本来是trolltech公司设计的一个跨平台库。2008年trolltech被诺基亚收购,Qt就成了诺基亚的官方GUI界面库。

包含的模块(摘自维基百科)
* QtCore—QtCore模块是所有基于Qt的应用程序的基础,提供信号与槽的对象间通信机制、IO、事件和对象处理、多线程
* QtGui—包含了开发图形用户界面应用程序所需的功能。使用其支持的各个平台的本地图形API。支持反锯齿、向量形变。支持ARGB顶层 widget
* QtMultimedia
* QtNetwork—提供了网络程序设计功能。支持通用协议,如HTTP、FTP和DNS,包括对异步HTTP 1.1的支持。与较低层的TCP/IP和UDP协议,如QTcpSocket、QTcpServer和QUdpSocket
* QtOpenGL—提供在应用程序中使用OpenGL和OpenGL ES加入3D图形。在Windows平台上亦支持Direct3D
* QtOpenVG
* QtScript— 包含完全集成的ECMA标准脚本引擎。提供信号与槽机制简化对象间通信和QtScript调试器。
* QtScriptTools—额外的Qt Script组件
* QtSql—将数据库集成至应用程序。支持所有主要的数据库驱动包括ODBC、MySQL、PSQL、SQLite、 ibase、Oracle、Sybase、DB2。
* QtSvg—支持SVG格式
* QtWebKit—集成WebKit,提供了HTML浏览器引擎,便于在本地应用程序中嵌入网络内容和服务。
* QtXml—提供了XML文档的阅读器和编写器、支持SAX和DOM。
* QtXmlPatternsl—提供了XQuery和XPath引擎支持。
* Phonon—集成Phonon,支持跨平台应用程序播放音频和视频内容。
* Qt3Support—模块提供兼容Qt 3.х.х版本的程序库

从上面可以看出,Qt可以取代自Visual C++ 6.0中就开始支持的MFC、Winsock、MSHTML、MSXML、MSDXM(以及后来的Windows Media Player控件)、ADO数据访问等模块。

开发环境IDE
开发环境是程序员最为关注的,Windows平台微软VC++、VB、C#系列语言的成功,就是因为有了强大的Visual Studio开发环境.
当年Visual Studio 6.0跟MFC就提供了类似的事件-处理函数钩连工具,如今开源软件也提供了,并且更为强大易用。

除了Qt Creator,Qt的窗体设计器(Qt Designer)还可以作为插件,在别的IDE下使用。例如,可以插入Netbeans、Visual Studio和Eclipse。至今,插件仍然有一定的问题,例如Socket/Slot关联器,在ubuntu 9.10 + Netbeans 6.8的搭配下,Signal/Slot关联器无法使用,而在Windows 7+Visual Studio 2008 SP1下正常。

为了开发多语言程序,Qt提供了Qt Linguist,可以方便地编辑多语言资源。

内存管理
可能是出于对嵌入式应用的性能考虑,现在版本的Qt并没有集成功能非常强大的(类似于Java或.net的)垃圾收集器,但是也不用在内存管理上太过费心。Qt中大部分widget都从QObject类继承而来,而QObject有一个上级对象的属性;当上级对象(如窗体中按钮的上级对象是窗体)退出内存,Qt内置的机制会将所有下级对象一起销毁。如果在上级对象未退出内存的时候需要删除下级对象以释放内存,则可以调用freeLater( )函数来释放。
当然,像传统的C++一样,Qt不解决野指针陷阱,对象删除后的指针需由程序员自己消灭或者另赋他址。相比于MFC的内存管理,Qt的内存管理已经相当人性化,期待下一个版本加入内置的垃圾收集器,让程序员可以选择由垃圾收集器收集内存空间。

跨平台开发
Qt开发的程序都是跨平台的,可以在Windows、FreeBSD、Linux(X11)、MacOSX四大主流桌面平台上运行,还支持 Symbian、Embedded Linux、WinCE、Maemo四种嵌入式平台,而OpenSolaris、iPhone OS、Android、Amazon Kindle平台的开发也正在进行中。

Qt Creator本身可以在Windows、Linux(X11)、MacOSX上运行。

授权
Qt主要以三种协议发布:GPL、LGPL和Commercial。三种协议的代码相同,只是协议不同而已。GPL就不用说了,LGPL协议允许基于Qt 开发开源或闭源/商业软件;Commercial协议需要花钱从Nokia购买,每开发者授权价格在2000美元之下,附加一年的技术支持;只有在需要对 Qt本身进行修改,并且修改的部分不能开放源代码的时候,才有必要采用Commercial协议。因此个人和小企业开发者使用Qt绝大部分情况是不要钱的。
回复此楼

» 收录本帖的淘帖专辑推荐

信息

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jason.masc

铜虫 (初入文坛)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+2): 鼓励讨论! 2011-02-20 18:42:21
总体而言,QT的所谓架构清楚,是依靠完全的多层继承体系实现的,这一点上只是方便了初学者学习,但其实对于编译器不会带来任何好处,这也就决定了QT的运行效率永远都在MFC之下。
引用回帖:
Originally posted by yalefield at 2011-01-30 23:26:20:
http://www.cnbeta.com/articles/111246.htm
Visual Studio 2003/2005/2008下开发Windows图形界面程序,程序员一直做着抉择:选择.net平台,则意味着需要XP用户安装.net Framework, 而且自己不能手工 ...

C++无所不能
2楼2011-02-16 23:04:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

喜欢

3楼2011-02-18 11:48:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yalefield 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 085600 295分求调剂 +5 W55j 2026-03-30 7/350 2026-03-30 18:29 by 啊李999
[考研] 292求调剂 +13 是妍子也是研子 2026-03-30 13/650 2026-03-30 18:01 by 小徐0109
[考研] 化学0703 调剂 306分 一志愿211 +8 26要上岸 2026-03-28 8/400 2026-03-30 16:39 by herarysara
[考研] 材料专硕调剂 +11 椰椰。 2026-03-29 11/550 2026-03-30 16:21 by wangjy2002
[考研] 286分调剂 +8 Faune 2026-03-30 9/450 2026-03-30 15:11 by Faune
[考研] 284求调剂 +14 junqihahaha 2026-03-26 15/750 2026-03-30 14:12 by 探123
[考研] 0703本科郑州大学求调剂 +7 nhj_ 2026-03-25 7/350 2026-03-30 12:44 by fangnagu
[考研] 296求调剂 +10 彼岸t 2026-03-29 10/500 2026-03-30 10:50 by 探123
[考研] 285求调剂 +5 AZMK 2026-03-29 8/400 2026-03-30 10:41 by AZMK
[考研] 318一志愿吉林大学生物与医药 求调剂 +5 笃行致远. 2026-03-28 5/250 2026-03-30 06:56 by ilovexiaobin
[考研] 275求调剂 +15 Micky11223 2026-03-25 20/1000 2026-03-29 20:44 by 唐沐儿
[考研] 各位老师好,我的一志愿为北京科技大学085601材料专硕 +9 Koxui 2026-03-28 9/450 2026-03-29 20:43 by 无际的草原
[硕博家园] 招收生物学/细胞生物学调剂 +4 IceGuo 2026-03-26 5/250 2026-03-29 01:25 by griffith2014
[考研] 308求调剂 +7 墨墨漠 2026-03-27 7/350 2026-03-28 07:43 by 热情沙漠
[考研] 330一志愿中国海洋大学 化学工程 085602 有读博意愿 求调剂 +3 wywy.. 2026-03-27 4/200 2026-03-28 03:32 by fmesaito
[考研] 086000调剂 +3 7901117076 2026-03-26 3/150 2026-03-27 21:34 by Jianing_Mi
[考研] 316求调剂 +5 Pigcasso 2026-03-24 5/250 2026-03-27 12:10 by zhshch
[考研] 286求调剂 +4 lim0922 2026-03-26 4/200 2026-03-27 10:28 by guoweigw
[硕博家园] 北京林业大学硕导招生广告 +6 kongweilin 2026-03-26 8/400 2026-03-27 10:18 by FF_16
[考研] 334分 一志愿武理-080500 材料求调剂 +4 李李不服输 2026-03-25 4/200 2026-03-25 21:26 by 星空星月
信息提示
请填处理意见