您的位置: 飞扬精品软件园 >> 文章中心 >> 新闻资讯 >> 掌上酷玩 >> 彻底超越MFC----诺基亚的开源GUI库:Qt

相关文章链接

本类文章排行

最新新闻资讯

    彻底超越MFC----诺基亚的开源GUI库:Qt

    彻底超越MFC----诺基亚的开源GUI库:Qt


    • 阅览次数: 文章来源: 网络 原文作者: 佚名 整理日期: 2010-05-17

    在Visual Studio 2003/2005/2008下开发Windows图形界面程序,程序员一直做着抉择:选择.net平台,则意味着需要XP用户安装.net Framework, 而且自己不能手工控制某些代码的优化;选择原生C++/MFC平台,则意味着需要编写繁琐的代码(VS2008甚至裁掉了基于MFCGUI 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 C#设计界面的Event/Handler关联器:

     



    是否很是神似?当年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绝大部分情况是不要钱的。


查看所有评论

网友对彻底超越MFC----诺基亚的开源GUI库:Qt的评论

网名:
主题:
内容:
验证码: