第一章 Getting Started
Hello Qt – 一个简单的程序
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}
QApplication类负责管理应用层的资源,argc,argv作为参数使得Qt支持一些命令行参数;
QLabel widget 用于显示"Hello Qt!". widget术语来自Unix,类似于windows的控件。按钮(Buttons),菜单(menus),滚动条(scroll bars)和主界面(frames)都是widget的例子。widget还可以包含其他widgets.例如一个application window一般包括一个QMenuBar,一些QToolBars,一个QStatusBar,和其他一些widget.许多应用使用QMainWindow或者QDialog作为application window, 但是Qt是如此灵活以至于任何widget都可以是一个window.在这个例子中,QLabel widget就是一个application window.
label->show();
使label变成可见的。控件(widgets)创建是是隐藏的,所以我们在显示前需要使其变成可见的,这样可以避免闪烁
return app.exec();
把控制交给Qt.从这一点,程序进入事件循环(event loop,类似windows的机制).循环接收用户的鼠标和键盘事件,并执行相应的程序。GUI应用与传统的批处理程序不同,批处理只是处理输入、产生输出,并自动终止。
为了简单,我们不操心调用delete QLabel来释放内存。这个小的内存泄露是无害的,因为操作系统在程序终止时会回收内存。
要使这个程序运行,必须获取并安装 Qt4,安装步骤:
-------------------------------------------------------------------------------------------
首先从网上获取Qt的最新版本:
http://www.trolltech.com/download/
1. Lecensing注意
包括两个形式:开源和商用
2.安装Qt/Windows
当前的版本是qt-win-opensource-4.3.2-mingw.exe(2009.01.22当前最新为4.4.3版本).下载并运行这个文件。
当安装的MinGW时,如果你已经有MinGW C++ compiler,你必须指出其目录。否则,按照MinGW. GLP Version的Qt不能在VC下工作,所以必须安装MinGW.Qt's的例子会自动安装,并有相关文档。
安装完成后,你将有一个新的应用Qt by TrollteckV4.3.2(OpenSource).这个文件夹包括Qt Assistant和Qt Designer 和一个Qt 4.3.2的命令行,启动一个控制台窗口。启动这个窗口将配置Qt的编译环境。在这个窗口中可以运行qmake和make来构建Qt应用。
-------------------------------------------------------------------------------------------
将bin目录增加到PATH
然后编译程序:examples/chap01/hello/hello.cpp
qmake -project
如果想创建平台独立的工程
qmake hello.pro
编译:
make
运行:
hello
-------------------------------------------------------------------------------------------
Qmake的使用
使用build工具构建Qt应用是一个及其简单的事情。有三个选项:qmake, 第三方build tool, IDE
本书将使用qmake project(.pro)文件来构建例子和插件。我们来研究一下.pro文件的语法。
.pro文件的目的是列出工程中包含的源文件。
工程文件中的三个主要类型是app(独立应用),lib(静态或者共享库),subdirs(递归构建),通过TEMPLATE来确定:
TEMPLATE = lib
如果是subdirs template,只需定义TEMPLATE = subdirs.在每个子目录,qmake会寻找.pro文件并构建工程。例如examples.pro文件使用的就是subdirs templates.
如果没有出现TEMPLATE,默认是app.对于app和lib工程,常用的变量包括:
--HEADERS: 标识.h文件
--SOURCES: 表示.cpp文件
--FORMS:表示 Qt Designer使用的.ui文件,被uic处理
--RESOURCES: 表示.qrc文件,被rcc处理
--DEFINES:C++预处理符号
--INCLUDEPATH: 工程的include目录
--LIBS:工程的链接库
--CONFIG: 工程配置和编译选项
--QT: 工程使用的Qt模块。缺省包括了core gui,对应QtCore和QtGui模块
--VERSION:目标库的版本
--TARGET: 可执行文件(或lib)的名字,不包括扩展名,前缀或者版本西南向。缺省在当前目录
--DESTDIR:执行文件放置的目录。缺省的地方是平台不同的,如linux在当前目录,windows在debug/release目录
--DLLDESTDIR:目标libaray文件放置的位置
CONFIG变量用于控制build process,与如下选项:
--debug: 生成的执行文件有debug信息,使用Qt的debug version
--release:生成release版本
--warn_off:尽量少警告
--qt: 使用qt,缺省就是这样
--dll: a shared library被构建
--staticlib: 构建静态library
--plugin: 构建插件,插件必须是dll
--console: 应用需要写console(使用cout,cerr,qWarning()等)
--app_bundle:只Mac OS支持
--lib_bundle:只Mac OS支持
-------------------------------------------------------------------------------------------