24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1474  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 085602化工求调剂(331分) +7 111@127 2026-03-30 7/350 2026-03-30 20:02 by 无际的草原
[考研] 291求调剂 +8 Y-cap 2026-03-29 10/500 2026-03-30 19:31 by Y-cap
[考研] 085600,专业课化工原理,320分求调剂 +5 大馋小子 2026-03-29 5/250 2026-03-30 19:02 by 源_2020
[考研] 322求调剂 +10 宋明欣 2026-03-27 10/500 2026-03-30 18:47 by 544594351
[考研] 0703化学求调剂 +6 丹青奶盖 2026-03-26 8/400 2026-03-30 18:33 by 探123
[考研] 262求调剂 +4 ZZ..000 2026-03-30 4/200 2026-03-30 15:57 by wangjy2002
[硕博家园] 求调剂 有机化学考研356分 +10 Nadiums 2026-03-25 11/550 2026-03-30 11:56 by yjolah
[考研] 295求调剂 +5 wei-5 2026-03-26 5/250 2026-03-30 08:34 by 探123
[考研] 一志愿北京工业大学,324分求调剂 +6 零八# 2026-03-28 6/300 2026-03-29 21:20 by nanaliuyun
[考研] 327求调剂 +6 汲亦昊 2026-03-29 6/300 2026-03-29 13:40 by peike
[考研] 322求调剂 +5 旧吢 2026-03-24 5/250 2026-03-28 13:26 by Iveryant
[考研] 0856,材料与化工321分求调剂 +12 大馋小子 2026-03-27 13/650 2026-03-28 10:56 by self2008
[考研] 285求调剂 +4 AZMK 2026-03-27 7/350 2026-03-27 20:59 by AZMK
[考研] 308求调剂 +7 墨墨漠 2026-03-25 7/350 2026-03-27 14:47 by 狂炫麦当当
[考研] 08开头275求调剂 +4 拉谁不重要 2026-03-26 4/200 2026-03-27 14:12 by Delta2012
[考研] 305求调剂 +5 哇卢卡库 2026-03-26 5/250 2026-03-27 14:01 by laoshidan
[考研] 材料求调剂 +5 .m.. 2026-03-25 5/250 2026-03-27 11:08 by 不吃魚的貓
[考研] 303求调剂 +6 蓝山月 2026-03-25 6/300 2026-03-25 22:47 by 418490947
[考研] 求调剂 +3 李李不服输 2026-03-25 3/150 2026-03-25 13:03 by cmz0325
[考研] 生物学学硕求调剂 +7 小羊睡着了? 2026-03-23 10/500 2026-03-25 02:24 by 清风拂扬。 m
信息提示
请填处理意见