我们接触的所有编程技术,在学习第一课时都是以Hello,world!为起始。我就非要改成Hello FishC !!>.< ,我们将从一个Hello FishC 程序说起,先讲述一个GUI(Graphical User Interface,图形用户界面)项目的创建、运行和发布的过程;然后再整个项目分析,从单一的主函数文件,到使用图形界面.ui文件,再到自定义C++类和Qt图形界面类,一步一步分析解释每行代码,让我们能够清楚的看到Qt程序的创建、管理、编译和运行项目的内部实现。当然这些将在以后逐步了解,我们还是先去研究一下如何编写Hello FishC 程序吧。
首先我们要打开VS2008,因为之前已经在VS上面搭建好了QT环境,所以我们在点击 文件->新建->项目 后会出现如下:
项目名称已经写好为: Hello FishC,单击 确定
进入Qt工程的引导界面,点击 下一步。这就来到了选择库的界面,系统会默认自动为我们选择Qt core 和 GUI 两个库,通过这里可以看出,Qt是多么庞大的一个库,不仅有GUI, 还有NetWork,OpenGL,XML之类的。看来Qt对于这些功能也都给我们提供了相应的借口,我们以后会慢慢用到的,这里直接下一步。
下一个界面需要我们自己定义文件名,我们也可以不做修改默认名字,其中 Base class 我们选择QDialog,也就是一个对话框的类作为基类,直接点完成。
好了已经可以看到,IDE自动生成了N多个文件。用图来对照着说哈
hellofishc.ui 是该文件设计师设计的界面对应的界面文件
hellofishc.qrc 是该文件的资源管理文件,当然需要我们安装Qt Create 里面自带的Qt Edit一会再说
hellofishc.h 是该文件的HelloFishC类的头文件
hellofishc.cpp 是该文件的HelloFishC类的源文件
main.cpp 是该文件中包含的 main() 主函数
下面我们把main.cpp中的代码修改一下:
1.#include "hellofishc.h"
2.#include <QtGui/QApplication>
3.#include <QtGui/QLabel>
4.int main(int argc, char *argv[])
5.{
6. QApplication a(argc, argv);
7. // HelloFishC w;
8. QLabel * label = new QLabel("Hello FishC !");
9. label->show();
10.// w.show();
11. return a.exec();
12.}
红色是添加的代码,这里用到了一个Qt封装好的类 QLabel ,我们在使用类的时候就像JAVA中导入包一样,用什么类必然有和这个类名一样的头文件,比如 QtGui/QLabel, 当然这个我们可以去 src 文件夹中找到,有兴趣的可以看看特的源码,好了我们看看运行出来的结果是什么,点击 启动调试 按钮,一个很小的窗口出现了。。。
这就是我们的第一个Qt程序。这里还要对其进行一番解释。
第1、2、3行就是需要引入的头文件。和普通的C++程序一样的,如果我们需要用到什么组件,就必须引入相应的头文件,如同JAVA的import一样,它的命名规范和JAVA也很相近,Qt头文件和类名是一致的。
第4行是main函数函数头。学过C++的人都懂得。实际上Qt完全通过普通的main函数进入主程序,这跟MFC需要继承一个App类是不一样的。
第5行大括号,第6行,创建一个QApplication对象。这个对象用于管理应用程序级别的资源,QApplication的构造函数要求两个参数,分别是main的那两个参数,一次Qt可以说是支持命令行参数的。
第7行注释掉了,这里没有用到。第8行创建了一个QLabel对象,并且能够显示Hello FishC 字符串。和MFC的Label控件一样,是用来显示文本的。在Qt中,被称为一个widget,它就是windows技术里面的控件和容器。也就说widget可以将其他widget放入其中,很多的Qt程序使用QMainWindow或者QDialog作为顶级组件,上面这个例子中,顶级组件就是QLabel,我们继续看。
第9行,就是让这个控件可见。组件创建出来的时候是hide的,我们需要调用show方法来手动显示出来。
第10行是和第7行是对应的,这里一起注释掉。
第11行是将应用程序的控制权重新转交给Qt。这是的程序事件循环开始了,现在开始响应我们发出的各种事件了。
第12行大括号和前面呼应作为结束程序的标志。
这里我们是用 new 来创建了一个QLabel控件,照例来讲我们应该delete掉的,但是这个程序很小,当自己关闭后,系统自动回收这个控件,只是我们以后再写程序的时候注意 new 一定要和 delete 相对应哈!谨防内存泄漏。。。。。
PS: 弄个好看点的东东, 将刚才的第8行代码坐下修改,如下:
QLabel *label = new QLabel("<h3><font color='blue'>Hello Fishc !<h3>");