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();

出处: http://devbean.blog.51cto.com/448512/194137

时间: 2024-10-18 15:23:48

Qt学习之路(3):Hello,world!(续)的相关文章

Qt 学习之路 2 --- 读书笔记

一.文章来由 来自豆子老师非常好的一本Qt教程,但是只有网络版,所以用这个做笔记了,不动笔墨不读书嘛~~ 二.读书笔记 1.Qt 学习之路 2(2):Qt 简介 1.1 关于 Qt 的一站式解决 Qt 是一个著名的 C++ 应用程序框架.但并不只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件.使用 Qt,在一定程度上你获得的是一个"一站式"的解决方案:不再需要研究 STL,不再需要 C++ 的,不再需要到处去找解析 XML.连接数据库.访问网络的各种第三方库,因为

Qt学习之路(23):自定义事件

Qt允许你创建自己的事件类型,这在多线程的程序中尤其有用,当然,也可以用在单线程的程序中,作为一种对象间通讯的机制.那么,为什么我需要使用事件,而不是使用信号槽呢?主要原因是,事件的分发既可以是同步的,又可以是异步的,而函数的调用或者说是槽的回调总是同步的.事件的另外一个好处是,它可以使用过滤器. Qt中的自定义事件很简单,同其他类似的库的使用很相似,都是要继承一个类进行扩展.在Qt中,你需要继承的类是QEvent.注意,在Qt3中,你需要继承的类是QCustomEvent,不过这个类在Qt4中

Qt学习之路(25):QPainter(续)

首先还是要先把上次的代码拿上来. void PaintedWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawLine(80, 100, 650, 500); painter.setPen(Qt::red); painter.drawRect(10, 10, 100, 400); painter.setPen(QPen(Qt::green, 5)); painter.setBrush(Qt::b

Qt学习之路(13):菜单和工具条(续)

前面一节我们已经把QAction添加到菜单和工具条上面.现在我们要添加一些图片美化一下,然后把信号槽加上,这样,我们的action就可以相应啦! 首先来添加图标.QAction的图标会显示在菜单项的前面以及工具条按钮上面显示. 为了添加图标,我们首先要使用Qt的资源文件.在QtCreator的项目上右击,选择New File...,然后选择resource file. 然后点击next,选择好位置,Finish即可.为了使用方便,我就把这个文件建在根目录下,建议应该在仔细规划好文件之后,建在专门

Qt学习之路(24):QPainter

多些大家对我的支持啊!有朋友也提出,前面的几节有关event的教程缺少例子.因为event比较难做例子,也就没有去写,只是把大概写了一下.今天带来的是新的部分,有关Qt的2D绘图.这部分不像前面的内容,还是比较好理解的啦!所以,例子也会增加出来. 有人问豆子拿Qt做什么,其实,豆子就是在做一个Qt的画图程序,努力朝着Photoshop和GIMP的方向发展.但这终究要经过很长的时间.很困难的路程的,所以也放在网上开源,有兴趣的朋友可以来试试的呀- 好了,闲话少说,来继续我们的学习吧! Qt的绘图系

Qt学习之路(12):菜单和工具条

在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序.虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜单和工具条. 就像Swing里面的Action一样,Qt里面也有一个类似的类,叫做QAction.顾名思义,QAction类保存有关于这个动作,也就是action的信息,比如它的文本描述.图标.快捷键.回调函数(也就是信号槽),等等.神奇的是,QAction能够根据添加的位置来改变自己的样子 --如

Qt学习之路(11):MainWindow

尽管Qt提供了很方便的快速开发工具QtDesigner用来拖放界面元素,但是现在我并不打算去介绍这个工具,原因之一在于我们的学习大体上是依靠手工编写代码,过早的接触设计工具并不能让我们对Qt的概念突飞猛进-- 前面说过,本教程很大程度上依照的是<C++ GUI Programming with Qt4, 2nd Edition>这本书.但是,这本书中接下来的部分用了很大的篇幅完成了一个简单的类似Excel的程序.虽然最终效果看起来很不错,但我并不打算完全依照这个程序来,因为这个程序太大,以至于

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

任何编程技术的学习第一课基本上都会是Hello, world!,我也不想故意打破这个惯例--照理说,应该首先回顾一下Qt的历史,不过即使不说这些也并无大碍. 或许有人总想知道,Qt这个单词是什么意思.其实,这并不是一个缩写词,仅仅是因为它的发明者,TrollTech公司的 CEO,Haarard Nord和Trolltech公司的总裁Eirik Chambe-Eng在联合发明Qt的时候并没有一个很好的名字.在这里,字母Q是Qt库中所有类的前缀--这仅仅是因为在Haarard的emacs的字体中,

Qt学习之路(1):前言

我们所使用的Qt,确切地说也就是它的GUI编程部分.C++的GUI编程同Java不同:GUI并不是C++标准的一部分.所以,如果使用Java,那么你最好的选择就是AWT/Swing,或者也可以使SWT/JFace,但是,C++的GUI编程给了你更多的选择:wxWidget, gtk++以及Qt.这几个库我都有接触,但是接触都不是很多,只能靠一些资料和自己的一点粗浅的认识说一下它们之间的区别(PS: 更详尽的比较在前面的文章中有). 首先说wxWidget,这是一个标准的C++库,和Qt一样庞大.