一直觉得总是在IDE下写程序会阻碍人的成长,IDE固然在很大程度上提高了效率,但却掩盖了很多运行在底层的过程。很多学习程序的人都知道在写玩程序后按下编译按钮,然后程序就可执行了,却不再深究其中的机理。但我想,对程序的认识只停留在这个层面,未免显得过于狭隘。
我也一直对一些集成开发环境并没有多大好感,而迫不得已去使用它们也仅仅是因为我没有脱离他们编写程序的能力。业余吓折腾网页也将近有一年半的经验了,我也一直是习惯在纯文本编辑器下编辑网页,这样的好处显而易见。也许很多学习网页开发的人一开始就是用Dw,菜单式的操作固然轻松,却不能说他们真正的懂网页。一个能在文本下编辑网页的人可以轻松的上手DW,因为即使他找不到相应的菜单,也可以直接通过最原始的方法搞定一切,而一个熟用DW的人却未必可以用一个记事本写出一个完整的页面。
我想那些集成开发环境也是一样的道理!所以说:IDE是给两种人用的,一种是不会写程序的人,菜单可以简化复杂的过程;另一种便是真正的高手,他们完全熟知一切,IDE只是减轻他们的负担而已。当然,我属于前者。
说了这么多废话,切入正题。最近刚上手QT,对QTCreator感觉也十分不错,但还是打算体验下手工编译的乐趣。也让我初步了解了QT编译的过程,在此分享,大侠绕道。
由于只是体验,还是先用QTCreator创建一个工程生成最基本的文件。我选用的是Qdialog为Base class。步骤多说无益,下面就没IDE啥事了。
进入工程目录看下生成的文件。又如下后缀文件.pro,.cpp,.h,.ui。由于我想从头开始编译,所以删除了.pro后最的工程文件。
打开终端,输入以下命令进行预处理。
qmake -project
再次看文件的变化情况,发现生成了.pro工程文件。
再在终端输入
qmake test.pro
test.pro是新生成的工程名,文件中又多了一个makefile。离成功近在咫尺了!
最后
make
然后终端会跳出一大串信息,编译成功!
最关键的是最后的文件变化,编译后会产生如下文件ui_dialog.h,这引起了我的注意,在打开dialog.cpp,发现这个头文件被加载了!你会发现如下语句。
#include <ui_dialog.h>
豁然开朗,一直对QT的UI文件的角色迷惑不解,我们知道QT是一个C++类库,所以一直好奇为什么在UI文件里拖入的元件却可以直接在运行种显示出来,甚至可以为其添加沟槽和信号呢?我并没有新建这个类啊。原来答案就在这里,在编译的过程中,QT会将UI文件翻译成.h文件,为你所拖进去的那些元件生成相应的类,也就是说,我新建的工程中的那个dialog.ui文件在编译过程中会被翻译成ui_dialog.h,而dialog.ui在真正的编译中并没有扮演角色。