目前C++开发中常用的库有MFC和Qt
那么二者间有什么区别呢?我该用哪个更好呢?
01MFC和Qt的概念MFC
MFC是微软基础类库的英文简称(Microsoft Foundation Classes),以C++类的形式封装了Windows API,可以说MFC是WinAPI与C++的结合。其中包含大量Windows句柄封装类和Windows内建控件及组件的封装类,此外包含一个应用程序框架,以减少应用程序开发人员的工作量。
Qt
Qt是1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
基本上,Qt同XWindow上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL是同类型的东西。2014年Qt Creator 3.1.0正式发布新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP多平台。
可以看出Qt的一个巨大优势就在于优秀的跨平台特性。
02二者创建界面之差异MFC无法创建大小动态可变的子窗口,我们必须要手动修改代码来改变窗口的位置,这也是为什么在windows里的dialog不可改变。这个问题在软件进行国际化翻译时较为突出,因为国际化翻译必须要对每个语言的版本重新修改自己的软件。
在Qt中,任何东西都可以手动的敲出来,Qt拥有非常简单而又不失强大的layout机制,以至于不使用它就是在浪费时间了。Qt还提供了一个图形用户工具,Qt Designer,可以用来帮助建立用户界面。你可以随心所欲的多次重新生成用户界面。Qt Designer可以让你完成许多在MFC中不可能完成的任务,比如用预先填好的生成listview,在每个tab上用不同的view来使用tab 控制。
所以现在C++在windows平台开发也经常使用Qt作为应用程序开发来解决Qt不稳定和MFC不够美观的缺陷。
03帮助文档使用差异我们选择图形开发环境的时候,帮助文档极其重要。Visual的开发环境的帮助文档MSDN涵盖广泛。但是难免存在一些主题模糊,关键信息不突出的遗憾。另外一个令人头疼的就是其链接设计十分糟糕,很难通过链接从一个类跳转到其父类或者子类以及相关的类。如果你搜索一个关键字,不管是Visual C++, Visual J++, Visual Basic,只要包含这些关键字的信息都会统统返回。
相比之下,Qt的文档设计优化不少。Qt的文档中每一个类和方法都被详尽描述,案例也十分丰富。通过Trolltech公司提供的链接或者是Qt Assistant工具,可以方便的从一个类或者方法跳转到其他的类。文档还包含了一个初学者教程和一些典型应用的例子,同时还提供了FAQ和邮件列表,方便通过Internet或者用户群来查阅。实际上,Qt优秀的帮助文档使得寻求外部帮助的情况大大减少。
就像Tolltech公司所言:有如此优秀的Qt产品以及其帮助文档,技术支持是多余的。
04MFC和Qt的设计模式归根结底,Qt和MFC二者的差异就在于设计模式不同。
MFC的根本目的是访问包装起来的用C语言写的windows的API。 实际上这算不上一个优秀的面向对象设计模式,很多时候你必须提供一个包含15个成员的C语言的struct,但是其中只有一个与你所期望的相关,或者必须用旧式的参数来调用你的函数。
MFC还有一些奇葩的地方,如函数名没有任何的连续性。比如,如果你创建了一个graphical类,直到调用了creat( )以后该类才会被创建。然而对dialogs,必须要等到OnInitDialog( )才能创建这个对象。奇怪的是到了views,创建该类的函数名竟然成了OnInitUpdate( ),......你自己创建一个类用他们的方式调用它,你的程序崩溃了。MFC或多或少使用了面向对象的方法包装了Win32的API,正因如此,这些API有时是C++,有时是C,甚至是C和C++的混合体。总之MFC时常会出现问题且这种错误很难调试。
Qt的架构显然是设计成面向对象的。Qt在命名,继承,类的组织等方面保持了优秀的一致性。我们只需要提供一个方法的参数。在不同的类中进行调用也有很强的连贯性,返回值也很有逻辑性。
可以说是操作简单且功能强大,一旦我们使用了其中一个类,其他的类也就触类旁通,因为他们是一致的。在Qt中可以利用Edit控件,用C++创建类的方法来创建自己的QLineEdit。永远可以马上访问任何的方法,不管它是显示还是隐藏,在Qt中一切都可以按照你所想的方式来运作。
05为什么MFC还没有被淘汰?就目前而言,Qt的控件确实要好看不少,其界面开发功能也更为强大,为什么MFC一直没有被淘汰?
MFC是每个计算机专业必修课程,早期的C++项目很多都是以MFC为框架来开发构建的,它的优势在于对Windows的兼容性很好。虽然MFC也有着无法挽救的致命缺陷,甚至不少人都说微软停止维护MFC了,说到底MFC只不过最基本的一个框架而已,谈不上淘汰不淘汰的。 只要c++不被淘汰,其界面技术就不会淘汰,很长一段时间内MFC开发的程序都难以被其他的工具取代。
实际开发中MFC开发效率比Qt要高,另一方面也证明了C++的过人之处,即便如MFC这种设计得这么问题百出充满重重缺陷的框架,核心代码写得也不算高明,只要内核有可取之处,那么就能做出很好的效果。
想提升职业技能,就来大咖讲学堂
IT/艺设/语言/电商/情感
超多免费好课!
//本文部分图文源自网络,若有侵权请联系删除