Qt学习之路(3):Hello, world!(续)

下面来逐行解释一下前面的那个Hello, world!程序,尽管很简单,但却能够对Qt程序的结构有一个清楚的认识。如今再把代码贴过来:
 
#include <QApplication>
#include <QLabel>

int main( int argc, char *argv[])
{
        QApplication app(argc, argv);
        QLabel *label = new QLabel( "Hello, world!");
        label->show();
         return app.exec();
}
 
第1行和第2行就是须要引入的头文件。和普通的C++程序没有什么两样,若是要使用某个组件,就必需要引入相应的头文件,这相似于Java的import机制。值得说明的是,Qt中头文件和类名是一致的。也就是说,若是你要使用某个类的话,它的类名就是它的头文件名。
 
第3行是空行 :)
 
第4行是main函数函数头。这与普通的C++程序没有什么两样,学过C++的都明白。所以你能够看到,实际上,Qt彻底经过普通的main函数进入,这不一样于wxWidgets,由于wxWidgets的Hello, world须要你继承它的一个wxApp类,并覆盖它的wxApp::OnInit方法,系统会自动将OnInit编译成入口函数。不过在Qt中,就不须要这些了。
 
第5行,噢噢,大括号…
 
第6行,建立一个QApplication对象。这个对象用于管理应用程序级别的资源。QApplication的构造函数要求两个参数,分别来自main的那两个参数,所以,Qt在必定程度上是支持命令行参数的。
 
第7行,建立一个QLabel对象,而且可以显示Hello, world!字符串。和其余库的Label控件同样,这是用来显示文本的。在Qt中,这被称为一个widget(翻译出来是小东西,不过这个翻译并很差…),它等同于Windows技术里面的控件(controls)和容器(containers)。也就是说,widget能够放置其余的widget,就像Swing的组件。大多数Qt程序使用QMainWindow或者QDialog做为顶级组件,但Qt并不强制要求这点。在这个例子中,顶级组件就是一个QLabel。
 
第8行,使这个label可见。组件建立出来以后一般是不可见的,要求咱们手动的使它们可见。这样,在建立出组建以后咱们就能够对它们进行各类定制,以免出现以后在屏幕上面会有闪烁。
 
第9行,将应用程序的控制权移交给Qt。这时,程序的事件循环就开始了,也就是说,这时能够相应你发出的各类事件了。这相似于gtk+最后的一行gtk_main()。
 
第10行,大括号……程序结束了。
 
注意,咱们并无使用delete去删除建立的QLabel,由于在程序结束后操做系统会回收这个空间——这只是由于这个QLabel占用的内存比较小,但有时候这么作会引发麻烦的,特别是在大程序中,所以必须当心。
 
好了,程序解释完了。按照正常的流程,下面应该编译。前面也提过,Qt的编译不能使用普通的make,而必须先使用qmake进行预编译。因此,第一步应该是在工程目录下使用
 
qmake -project
 
命令建立.pro文件(好比说是叫helloworld.pro)。而后再在.pro文件目录下使用
 
qmake helloworld.pro  (make)
 
或者
 
qmake -tp vc helloworld.pro  (nmake)
 
生成makefile,而后才能调用make或者是nmake进行编译。不过由于咱们使用的是IDE,因此这些步骤就不须要咱们手动完成了。
 
值得说明一点的是,这个qmake可以生成标准的makefile文件,所以彻底能够利用qmake自动生成makefile——这是题外话。
 
好了,下面修改一下源代码,把QLabel的建立一句改为
 
QLabel *label = new QLabel( "<h2><font color='red'>Hello</font>, world!<h2>");
 
运行一下:
 
 
同Swing的JLabel同样,Qt也是支持HTML解析的。
 
好了,这个Hello, world就说到这里!明确一下Qt的程序结构,在一个Qt源代码中,一下两条语句是必不可少的:
QApplication app(argc, argv);
//...
return app.exec();
相关文章
相关标签/搜索