Qt是一个著名的C++库——或许并不能说这只是一个GUI库,由于Qt十分庞大,并不只仅是GUI。使用Qt,在必定程序上你得到的是一个“一站式”的服务:再也不须要研究STL,再也不须要C++的<string>,由于Qt有它本身的QString等等。或许这样说很偏激,但Qt确实是一个“伟大的C++库”。
咱们所使用的Qt,确切地说也就是它的GUI编程部分。C++的GUI编程同Java不一样:GUI并非C++标准的一部分。因此,若是使用Java,那么你最好的选择就是AWT/Swing,或者也可使SWT/JFace,可是,C++的GUI编程给了你更多的选择:wxWidget, gtk++以及Qt。这几个库我都有接触,可是接触都不是不少,只能靠一些资料和本身的一点粗浅的认识说一下它们之间的区别(PS: 更详尽的比较在
前面的文章中有)。 首先说wxWidget,这是一个标准的C++库,和Qt同样庞大。它的语法看上去和MFC相似,有大量的宏。听说,一个MFC程序员能够很容易的转换到wxWidget上面来。wxWidget有一个很大的优势,就是它的界面都是原生风格的。这是其余的库所不能作到的。wxWidget的运行效率很高,听说在Windows平台上比起微软自家的MFC也不相上下。 gtk++实际上是一个C库,不过因为C++和C之间的关系,这点并无很大的关系。可是,gtk++是一个使用C语言很优雅的实现了面向对象程序设计的范例。不过,这也一样带来了一个问题——它的里面带有大量的类型转换的宏来模拟多态,而且它的函数名“又臭又长(不过这点我却是以为无所谓,由于它的函数名虽然很长,可是一样很清晰)”,使用下划线分割单词,看上去和Linux一模一样。因为它是C语言实现,所以它的运行效率固然不在话下。gtk++并非模拟的原生界面,而有它本身的风格,因此有时候就会和操做系统的界面显得格格不入。 再来看Qt,和wxWidget同样,它也是一个标准的C++库。可是它的语法很相似于Java的Swing,十分清晰,并且SIGNAL/SLOT机制使得程序看起来很明白——这也是我首先选择Qt的一个很重要的方面,由于我是学Java出身的 :) 。不过,所谓“成也萧何,败也萧何”,这种机制虽然很清楚,可是它所带来的后果是你须要使用Qt的qmake对程序进行预处理,才可以再使用make或者nmake进行编译。而且它的界面也不是原生风格的,尽管Qt使用style机制十分巧妙的模拟了本地界面。另外值得一提的是,Qt不只仅运行在桌面环境中,Qt已经被Nokia收购,它如今已经会成为Symbian系列的主要界面技术——Qt是可以运行于嵌入式平台的。 以往人们对Qt的受权多有诟病。由于Qt的商业版本价格不菲,开源版本使用的是GPL协议。可是如今Qt的开源协议已经变成LGPL。这意味着,你能够将Qt做为一个库链接到一个闭源软件里面。能够说,如今的Qt协议的争议已经不存在了——由于wxWidgets或者gtk+一样使用的是相似的协议发布的。 在本系列文章中,咱们将使用Qt4进行C++ GUI的开发。我是参照着《C++ GUI Programming with Qt4》一书进行学习的。其实,我也只是初学Qt4,在这里将这个学习笔记记下来,但愿可以方便更多的朋友学习Qt4。我是一个Java程序员,感受Qt4的一些命名规范以及约束同Java有殊途同归之妙,于是从Java迁移到Qt4彷佛困难不大。不过,这也主要是由于Qt4良好的设计等等。 闲话少说,仍是尽快开始下面的学习吧!