C++面向对象课程设计,用哪个图形界面库合适?

一代球痞


回答这个问题之前,我们先来看看常用的C++界面库都有哪些?


1、Qt

放在第一位,也是重点推荐的,绝对是提高生产力,解放双手的好帮手。文档齐全,原生态跨平台支持,API相比MFC不知道优雅了多少倍。目前版本的QSS可以让你很方便的用C++来写界面。盛行国产化的今天,相信Qt的市场会进一步加大。

下图是使用Qt内置的QSS绘制的一个界面换肤效果图,还是很不错的(PS:作品来源于CSDN,博主:一去丶二三里,如有侵权,请随时联系)。

2、MFC

上个世纪的产物,目前就连亲爹微软也已经将他抛弃了,行业更有MFC==没饭吃一说。不过其在军工、电力等一些特有行业还是有一定的市场占有率。自用的话,创建基于对话框模式的下项目,作一些不涉及复杂界面效果的小工具还是很方面的。

比如下图是使用MFC拖拽的一个界面图。

3、第三方界面库,比如Duilib、BCG等。

这里重点介绍下Duilib,一款Windows下免费开源的DirectUI界面库,由于简约易扩展的设计以及稳定高效的实现被各大互联网公司普遍接受,广泛应用于包括IM、视频客户端、股票行情软件、导航软件、手机辅助软件、安全软件等多个行业的众多pc客户端软件。比如大家每天都在用的「微信」、「盘古越狱工具」、「爱奇艺」等等。

下图是基于Duilib开发的一款仿360安全卫士的界面效果。

至于缺点呢,也和突出,早期的版本目前作者已经不再维护了,所以或多或少会有一些坑在等着你,目前各大公司都有其自己维护的版本。


总结

在校学生,建议优选Qt,文档齐全,遇到问题也会很容易的在网络上找到解决办法。MFC这种上个世纪的东西还是让他永久的封存起来吧,至于Duilib等第三方开源库,文档实在是太少了,新手不建议选用。


本文为作者“一个程序员的奋斗史”悟空问答原创文章,未经允许转载、抄袭必究!

一个程序员的奋斗史


一般有两种,一种是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++语言实现。

两者优缺点对比:

消息循环

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缺点的实例,但我感觉这些已经够说明问题了,暂时删节不译)

然而Qt并没有资源的概念,这就解决了以上所提到的问题。Qt提供了一个脚本使得能将编入你的代码。对于界面设计,Qt Designer则创建了可读的代码。

价格

一旦你购买了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的地位,还是有点难度的。


小羊看科技


C++标准中并没有包含图形界面库(GUI),这也使得C++开发图形化界面需要依赖于第三方的库。以下是常用的几个图形界面库,供大家参考借鉴。

1)Qt

Qt是一种跨平台的应用程序和UI框架

它包括一种跨平台的类库,集成开发工具和跨平台的IDE,使用Qt,你可以编写基于Web的应用程序,并且通过许多的桌面和应用程序来部署它们,而无需重写代码。

2)Wx Widgets

wxWidgets是一个C++库,主要是让开发者为Windows,OS X,Linux和UNIX在32-bit和64-bit的体系下开发应用程序,同时也为移动的平台包括像Windows Mobile,iPhone SDK和嵌入式的GTK+。

3) EasyX

EasyX 是针对 C++ 的图形库,可以帮助 C 语言初学者快速上手图形和游戏编程。

比如,可以用 VC + EasyX 很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。

4)FLTK

FLTK(发音“Fulltick”)是UNIX/Linux(X11),Microsoft Windows和MacosX上一套跨平台的C++ GUI工具包。FLTK提供现代图形用户界面的功能而没有膨胀(谔谔...这个地方蛋疼了,路过的知道的说一下,原话:FLTK provides modern GUI functionality without the bloat),并且支持3D图形,依靠OpenGL和它内置的GLUT仿真。FLTK被设计成小巧和模块化足以实现静态链接,但作为一个共享库其做工很精细。FLTK也包括一个杰出的UI生成器,叫做FLUID,它能够在秒内创建应用程序。

5) GTKMM

gtkmm 是官方的GTK+的C++接口,GTK+是当前最流行的图形界面开发库之一。使用gtkmm,你不但可以从代码还可以用Glade来创建用户界面。不过需要libglademm的配合。gtkmm是自由软件,遵循LGPL(GNU Library General Public License)。





鼹鼠科技


Qt


Na小星


在Windows平台一般是用VC中的MFC,还有一个是QT,初学者建议先去学mfc,等过段时间再去学qt就会觉得比较轻松。


程序员帮帮忙


qt吧 其实以前有c++ buider 挺好的


用户263521714453


其实你们不知道还有个叫c++ builder的东西,我现在也还在用。


Tsechung


要看选择哪个平台,基本来说可以选择的有Qt(跨平台)、wxWidgets(跨平台)、GTK(Linux平台)等等,具体选择建议根据实际需求。


分享到:


相關文章: