提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|对比评测|编辑:龚雪|2016-04-06 09:16:35.000|阅读 1078 次
概述:MFC(微软基础类库)是专门为windows设计的一个用于开发图形用户界面的类库;Qt可以运行在Windows、Mac OSX、Unix、还有像Sharp Zaurus这类嵌入式系统中,Qt是完全面向对象的。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
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没有任何问题,不使用也没有任何问题。
归根结底,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控制。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
文章转载自:慧都控件网当您需要在 SWT 应用程序中显示 Web 内容时,通常有两种选择:内置浏览器小部件或像 JxBrowser 这样的商业选项?本文分析了两者之间的差异,并帮助您根据自己的需求选择合适的解决方案。
本文将介绍标准WPF DataGrid与DevExpress WPF GridControl之间的主要区别,希望能帮助大家选择正确的工具!
本文将介绍标准WPF DataGrid与DevExpress WPF GridControl之间的主要区别,希望能帮助大家选择正确的工具!
本文将详细评测Navicat的主要功能、用户体验以及其在数据库管理中的应用,希望能帮助到大家~
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢