MFC编程实例:Qt VS MFC,谁才是你的最爱?(上)
小职 2018-01-04 来源 :网络 阅读 951 评论 0

摘要:本文将为大家讲解关于MFC编程实例中Qt VS MFC,通过MFC编程实例的内容让你对相关知识点有进一步的认识和理解!

本文将为大家讲解关于MFC编程实例中Qt VS MFC,通过MFC编程实例的内容让你对相关知识点有进一步的认识和理解!

MFC(微软基础类库)是专门为windows设计的一个用于开发图形用户界面的类库。MFC或多或少使用了面向对象的方法包装了Win32的API,正因如此,这些API有时是C++,有时是C,甚至是C和C++的混合体。

Qt这个C++的图形库由Trolltech在1994年左右开发。它可以运行在Windows、Mac OSX、Unix、还有像Sharp Zaurus这类嵌入式系统中,Qt是完全面向对象的。Document/View modelMFC编程需要使用Document/View模式以及模板(template),如果不使用的话,编程将变得异常困难。而且模板(template)设定了固定的结构,若所需结构乃模板未定义的结构,则编程难。例如,划分一区域使显示两个视图(view)于两个文档(document)。还有一个经常的问题是:模板(template)创建了视图(view)却无法访问(access)它,文档(document)要做完所有事情,但是这经常会出现问题。 这种数据和视图分开的设计模式也是一种不错的模式,不应该成为否定MFC的理由。Qt不强制使用任何设计模式,如果你认为恰当,使用Document/view没有任何问题,不使用也没有任何问题。

伪对象 vs 真对象

归根结底,Qt和MFC的差异在于其设计的差异。MFC的根本目的是访问包装起来的用C语言写的windows的API,这绝非好的面向对象的设计模式。在很多地方,你必须提供一个包含15个成员的C语言的struct,但是其中只有一个与你所期望的相关,或者必须用旧式的参数来调用你的函数。MFC还有许多让人摸不着头脑的地方,函数名没有任何的连续性。比如,如果你创建了一个graphical类,直到调用了creat以后该类才会被创建。然而对dialogs,必须要等到OnInitDialog才能创建这个对象。奇怪的是到了views,创建该类的函数名竟然成了OnInitUpdate!你自己创建一个类并用他们的方式调用它,然后程序崩溃了。

比如说有一个dialog包含CEdit控件,如果没有调用DoModal你就不能使用GetWindowText,否则将会莫名其妙的失败。总之,MFC充满了丈二和尚摸不着头脑的事情,并且,这种错误很难调试。 诚然MFC是为了封装Window API,用MFC比Winows API会简单些,但确实有些函数的调用时机、先后顺序,如果不是用过一段时间,确实可能因此导致问题。

Qt恰恰相反,它的架构明显是经过精心设计的面向对象的。Qt因此在命名、继承、类的组织等方面保持了优秀的一致性。你只需要提供唯一一个方法的参数,仅此一个。在不同的类中调用方式也是有很强的连贯性,返回值也很有逻辑性。所有一切达到了简单和强大的和谐统一。一旦你使用了其中一个类,其他的类也就触类旁通,因为他们是一致的。在Qt中可以利用Edit控件,用C++创建类的方法来创建自己的QLineEdit。永远可以马上访问任何的方法,不管它是显示还是隐藏。在这里没有迷局,一切都按照你认为的简单的方式来运作。

消息循环

MFC是事件驱动的架构,要执行任何操作,都必须是对特定的消息作出响应。Windows对应用程序发送的信息数以千计,遗憾的是,要分清楚这些分繁芜杂的消息是很困难的,并且关于这方面的文档并不能很好的解决这些问题。

Qt的消息机制是建立在SIGNAL发送和SLOT接受的基础上的,这个机制是对象间建立联系的核心机制。利用SIGNAL可以传递任何的参数。它的功能非常的强大,可以直接传递信号给SLOT,因此可以清楚的理解要发生的事情。一个类所发送信号的数量通常非常的小(4或者5),并且文档也非常的齐全,这让你感觉到一切尽在掌握之中。SIGNAL/SLOT机制类似于Java中listener机制,不过这种机制更加轻量级、功能更齐全。

创建界面

MFC无法创建大小动态可变的子窗口 ,必须重新手动修改代码来改变窗口的位置(这恰好解释了为什么windows里的dialog是不可以改变的),这个问题在软件进行国际化翻译的时候更加严重,因为许多国家表达相同意思需要更长的词汇和句子,必须要对每个语言的版本重新修改自己的软件。

在Qt中,任何东西都可以手动的敲出来,因为它很简单。为了得到一个button,可以这样写:button = new PushButton( "buttonName", MyParentName );如果想在按下某个按钮以后调用某断代码的执行,可以这样写:connect( button, SIGNAL( clicked ), qApp, SLOT( action ) );Qt拥有非常简单而又不失强大的layout机制,以至于不使用它就是在浪费时间了。

Qt还提供了一个图形用户工具:Qt Designer,它可以用来帮助建立用户界面、可以修改所使用的任何控件的属性。不用将它们放在严格的位置,就可以通过layout完美的组织他们。这个工具所产生的代码是可以实际阅读并理解的,生成的代码单独放在一个文件里,在编程的同时,你可以随心所欲的多次重新生成用户界面。

Qt Designer可以让你完成许多在MFC中不可能完成的任务,比如用预先填好的生成listview、在每个tab上用不同的view来使用tab控制。

希望这篇MFC编程文章可以帮助到你。总之,同学们,你想要的职坐标MFC频道都能找到!

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程