c++面向对象课程设计

一般有两种,一种是MFC,一种是Qt 。
MFC编程需要使用Document/View模式以及模板(template),如果不使用的话,编程将变得异常困难 。而且,模板(template) 设定了固定的结构,若所需结构乃模板未定义之结构,则编程难已 。例如,划分一区域使显示两个视图(view)于两个文档(document) 。还有一个经常的问题是:模板(template)创建了视图(view)却无法访问(access)它,文档(document)要做完所有事情,但是这经常会出现问题 。
MFC的根本目的是访问包装起来的用C语言写的windows的API 。这绝非好的面向对象的设计模式 , 在很多地方,你必须提供一个包含15个成员的C语言的struct,但是其中只有一个与你所期望的相关 , 或者必须用旧式的参数来调用你的函数 。
Qt是一个功能非常完善的c++跨平台图形库 , 其实与其说图形库倒不如说它是一个与MFC类似的应用框架 。Qt本身就是使用c++语言实现 。
【c++面向对象课程设计】
两者优缺点对比:
消息循环
MFC是事件驱动的架构 。要执行任何操作,都必须是对特定的消息作出响应 。Windows对应用程序发送的
信息数以千计 , 遗憾的是,要分清楚这些分繁芜杂的消息是很困难的,并且关于这方面的文档并不能很好的解决这些问题 。
Qt的消息机制是建立在SIGNAL()发送和SLOT()接受的基础上的 。这个机制是对象间建立联系的核心机制 。利用SIGNAL()可以传递任何的参数 。他的功能非常的强大 。可以直接大传递信号给SLOT(),因此可以清楚的理解要发生的事情 。一个类所发送的信号的数量通常非常的小(4或者5) , 并且文档也非常的齐全 。这让你感觉到一切尽在掌握之中 。SIGNAL/SLOT机制类似于Java中listener机制,不过这种机制更加轻量级,功能更齐全 。
创建界面
MFC无法创建大小动态可变的子窗口 , 必须重新手动修改代码来改变窗口的位置(这恰好解释了为什么windows里的dialog是不可以改变的)在软件进行国际化翻译的时候更加严重 , 因为许多国家表达相同意思需要更长的词汇和句子,必须要对每个语言的版本重新修改自己的软件 。
Qt还提供了一个图形用户工具,Qt Designer,可以用来帮助建立用户界面 。可以修改所使用的任何控件的属性 。不用将他们放在严格的位置,可以通过layout完美的组织他们 。这个工具所产生的代码我们是可以实际上阅读并且可以理解的 。生成的代码单独放在一个文件里,在编程的同时,你可以随心所欲的多次重新生成用户界面 。
Qt Designer可以让你完成许多在MFC中不可能完成的任务,比如用预先填好的生成listview,在每个tab上用不同的view来使用tab 控制 。
Qt还提供了一个图形用户工具,Qt Designer,可以用来帮助建立用户界面 。可以修改所使用的任何控件的属性 。不用将他们放在严格的位置,可以通过layout完美的组织他们 。这个工具所产生的代码我们是可以实际上阅读并且可以理解的 。生成的代码单独放在一个文件里,在编程的同时,你可以随心所欲的多次重新生成用户界面 。
Qt Designer可以让你完成许多在MFC中不可能完成的任务 , 比如用预先填好的生成listview,在每个tab上用不同的view来使用tab 控制 。
使用MFC,一部分开发过程要依靠“resources”,在很多的案例中开发者必须使用他们 。这样会导致如下的后果:
出了Visual Studio,你很难使用其他的工具来完成开发 。
资源编辑器仅有有限的功能,比如:通过Dialog编辑器不可能改变所有的属性,一些属性可以改变,另一些属性则不可能改变 。(译者注:下面还有两条陈述MFC缺点的实例,但我感觉这些已经够说明问题了,暂时删节不译)
价格
一旦你购买了Visual Studio , 你将免费的获得MFC SDK 。
Qt在Unix上是可以免费获得其遵守GPL版权的版本(译者注:现在在windows 上也可以免费获得其GPL版本) 。如果要开发不公开源代码的软件,必须购买Qt的授权 。在特定平台下,每个开发者购买一个永久性授权,并获得一年的技术支持 。(译者注:后面关于购买价格等问题删去,因为价格不固定,如果有疑问请到官方网站查询价格)
发布
在发布基于MFC的软件时,必须依靠存在于客户电脑上的MFC 。但是这是不安全的,同样是MFC42.dll , 可以基于相同的库得到3个不同的版本 。通常,需要检查是否拥有正确的MFC42.dll版本,如果不是,就升级它 。但是升级MFC42.dll会改变很多软件的行为 。这让我感到很不舒服,如果用户在安装我的软件以后导致其机器死机该怎么办?
Qt则没有这个风险,因为Qt压根就没有“升级整个系统”这个概念 。
感觉MFC相比QT的确有很多的不足,但MFC的用户群巨大 。Qt要想短时间撼动MFC的地位,还是有点难度的 。

经验总结扩展阅读