linux qt实现窗口跳转_C++框架丨MFC与Qt框架之全面对比

本文探讨了C++开发中MFC和Qt框架的区别。MFC是微软基础类库,适合Windows API,而Qt是跨平台的GUI框架,具有优秀的跨平台特性和强大的布局机制。Qt的文档和设计更面向对象,但MFC在Windows兼容性和开发效率上有优势。对于开发者来说,选择取决于项目需求和个人偏好。
摘要由CSDN通过智能技术生成

4775209a5cdd00e4c4146b194199315f.gif

目前C++开发中常用的库有MFC和Qt

那么二者间有什么区别呢?我该用哪个更好呢?

4683fdb7d2dfeb0804317ad7efd97e54.png

01MFC和Qt的概念

MFC

MFC是微软基础类库的英文简称(Microsoft Foundation Classes),以C++类的形式封装了Windows API,可以说MFC是WinAPI与C++的结合。其中包含大量Windows句柄封装类和Windows内建控件及组件的封装类,此外包含一个应用程序框架,以减少应用程序开发人员的工作量。

2349853d33f7a9e0d425950e68782e36.png

Qt

Qt是1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

acb59d01c548c5eef16fef9b8521c724.png

基本上,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不可改变。这个问题在软件进行国际化翻译时较为突出,因为国际化翻译必须要对每个语言的版本重新修改自己的软件。

1322065b42afa2bcdb010ad9821a2994.png

在Qt中,任何东西都可以手动的敲出来,Qt拥有非常简单而又不失强大的layout机制,以至于不使用它就是在浪费时间了。Qt还提供了一个图形用户工具,Qt Designer,可以用来帮助建立用户界面。你可以随心所欲的多次重新生成用户界面。Qt Designer可以让你完成许多在MFC中不可能完成的任务,比如用预先填好的生成listview,在每个tab上用不同的view来使用tab 控制。

613ee21a3b5ae99953de3da07fa2af5a.gif

所以现在C++在windows平台开发也经常使用Qt作为应用程序开发来解决Qt不稳定和MFC不够美观的缺陷。

03帮助文档使用差异

我们选择图形开发环境的时候,帮助文档极其重要。Visual的开发环境的帮助文档MSDN涵盖广泛。但是难免存在一些主题模糊,关键信息不突出的遗憾。另外一个令人头疼的就是其链接设计十分糟糕,很难通过链接从一个类跳转到其父类或者子类以及相关的类。如果你搜索一个关键字,不管是Visual C++, Visual J++, Visual Basic,只要包含这些关键字的信息都会统统返回。

相比之下,Qt的文档设计优化不少。Qt的文档中每一个类和方法都被详尽描述,案例也十分丰富。通过Trolltech公司提供的链接或者是Qt Assistant工具,可以方便的从一个类或者方法跳转到其他的类。文档还包含了一个初学者教程和一些典型应用的例子,同时还提供了FAQ和邮件列表,方便通过Internet或者用户群来查阅。实际上,Qt优秀的帮助文档使得寻求外部帮助的情况大大减少。

就像Tolltech公司所言:有如此优秀的Qt产品以及其帮助文档,技术支持是多余的。

2fc8d13cc3e479539714e09077ddb9f2.png

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时常会出现问题且这种错误很难调试。

c7e35b0323226d7e675749bd427002b5.png

Qt的架构显然是设计成面向对象的。Qt在命名,继承,类的组织等方面保持了优秀的一致性。我们只需要提供一个方法的参数。在不同的类中进行调用也有很强的连贯性,返回值也很有逻辑性。

600839f01930aeb1a1f5d8993eeb6e58.png

可以说是操作简单且功能强大,一旦我们使用了其中一个类,其他的类也就触类旁通,因为他们是一致的。在Qt中可以利用Edit控件,用C++创建类的方法来创建自己的QLineEdit。永远可以马上访问任何的方法,不管它是显示还是隐藏,在Qt中一切都可以按照你所想的方式来运作。

05为什么MFC还没有被淘汰?

就目前而言,Qt的控件确实要好看不少,其界面开发功能也更为强大,为什么MFC一直没有被淘汰?

MFC是每个计算机专业必修课程,早期的C++项目很多都是以MFC为框架来开发构建的,它的优势在于对Windows的兼容性很好。虽然MFC也有着无法挽救的致命缺陷,甚至不少人都说微软停止维护MFC了,说到底MFC只不过最基本的一个框架而已,谈不上淘汰不淘汰的。 只要c++不被淘汰,其界面技术就不会淘汰,很长一段时间内MFC开发的程序都难以被其他的工具取代。

dda33469075910b5a33260d58fd456e8.png

实际开发中MFC开发效率比Qt要高,另一方面也证明了C++的过人之处,即便如MFC这种设计得这么问题百出充满重重缺陷的框架,核心代码写得也不算高明,只要内核有可取之处,那么就能做出很好的效果。

08eba5674474fe2ff66fb4adddf9b403.png7da93390b1d093eb943e642b0af16097.png

5086b172028b85292e7f145aebe1c171.png

2abf94c0c7a49250bc4a0a452f59b1de.png

fe443ae0b95ebd8ecba4ff29ef2ba759.png

ded0df1aad50c672c5b2cfea2d0c4bdb.png

4b909486bcc655deb355c08c712ac098.gif

想提升职业技能,就来大咖讲学堂

IT/艺设/语言/电商/情感

超多免费好课!

e986917e6887697dff99e1c89d1f5df3.png

//本文部分图文源自网络,若有侵权请联系删除

35cd11c278233f0e87c22d2f8f2cc116.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值