Qt学习手记之一 转帖

来源:互联网 发布:杭州卓森网络怎么样 编辑:程序博客网 时间:2024/05/18 01:24

(安装篇)

前奏:


提到C++的GUI Framework估计大多数人都会想到MFCVCL,因为在十年前的COM时代,这两个大家伙几乎垄断了整个C++ windows平台上应用程序的开发市场, 但是最近几年,随着.NET framework的推出。使得MFC这样原本就非常丑陋,麻烦的framework开始风光不再了,我也学过几天的MFC,那种宏作为消息满天飞的编程风格让我很快就放弃了,几次和朋友的交流中,我们都认为C++其实不太适合做GUI程序,但是我必须面对一个问题:当我需要用C++写个GUI程序的时候,我该用什么?我一直非常犹豫,很显然,我不太愿意用MFC,我也不太愿意为了VCL再去学一个IDE的用法,而且我不得不用C++写GUI的时候往往是在非windows平台上,显然上面两个framework就更不符合这个要求了。经过了一番调查,我最终选择了Qt这个库,于是也打算在这个blog上开一个学习手记系列。


下载:


好了,现在先让我们搭建工作环境,讲述Linux上的Qt环境设置的文章网上很多,我这里不想再累述了,有兴趣的人可以google之。我下面谈在windows下的安装和设置:首先,我们都知道,Qt这样的开源产品和GCC编译器的密切关系,所以首先我们必须有MinGW环境,那么第一步,就必须先安装MinGW,我这里推荐一个IDE,dev-cpp,他是基于MinGW的一款C++ IDE,自带了MinGW,集成了gcc、g++、gdb等工具,非常有用。下载地址如下:
http://www.bloodshed.net/devcpp.htm


接着,我们需要下载Qt了,熟悉开源产品的朋友都知道,这种产品通常有两种安装方式:第一,源码安装,这个下载后,在命令行(shell)进行本地编译即可,这个在Linux下安装软件是非常常见的;第二,是二进制安装,通常有自带的GUI界面的图形安装想到,在windows下通常是这种安装方式,其实那种安装方式和操作系统没什么必然的联系,只是一种习惯而已,既然我们是在windows下,那么就入乡还俗,用第二种方式,我们需要下载Qt的Runtime for MinGW包,地址如下:
http://www.trolltech.com/


安装:


下载之后,你会得到一个qt-win-opensource-4.2.2-mingw.exe文件,双击后启动安装程序,和通常安装windows程序一样基本上只要一路next即可,只有一个地方要特别注意,就是他会问你MinGW的路径,你如果安装的就是MinGW,那么就写X:/MinGW(X是你安装MinGW所在的目录),如果你安装的是dev-c++就写你安装他所在的目录,如下图所示:

当然你也可以选择这个时候在线安装MinGW,可是这样就取决于网络状况了(这里是直接连接国外的服务器的,一般会很慢,经常断线),这里不鼓励使用。最后,等向导完成后,你会发现你的开始菜单里多出一项Qt by Trolltech v4.2.2 (OpenSource)菜单项,到这里还没最终完事,因为Qt没还没建立debug库,会导致在安装目录之外你不能运行Qt程序,因此展开该菜单项,选择Qt 4.2.2 (Build Debug Libraries),就会自动编译debug库,编译时间很长,需要耐心等待,不熟悉源码安装的方式朋友们也可以体验下源码安装的感觉(一条条命令往上飞,彷佛穿越了时空,-_-b)……


设置:


虽然,qt自带了命令行环境(Qt 4.2.2 Command Prompt),但是我们可能还是希望把环境变量全局化,因此我们可以右击"我的电脑->属性->高级->环境变量->系统变量的path"值后面加上下面三个路径:
X:/Dev-Cpp/bin
X:/Dev-Cpp/mingw32/bin
X:/Qt/4.2.2/bin

目录之间用";"分割,至此环境搭建完成。


检验安装:


Qt自带了很多DOME。我们可以在X:/Qt/4.2.2/examples/下找到,例如我们可以用命令行环境进入到X:/Qt/4.2.2/examples/tutorial/t1目录下,然后运行qmake命令编译该程序DOME,如果安装没问题,会在该目录下的relese目录下找到Qt版的Hello World程序,如下图所示:

 

 

(入门篇)

按 照习惯,学习一个库,一般从写一个Hello World程序开始,在上篇中我们已经在库的安装目录里看到了这样的例子,但是那个例子只有一个button,过于简单了,甚至不能算是一个完整的窗体程 序,为了比较深切的体会Qt编程的方式和思想,我们有必要自己写一个相对比较复杂的Hello程序,我们的程序里应该有一个面板里面放置两个控件(一个无 事件控件,和一个有事件控件)来组成我们的程序,对于一个事件驱动的程序来说,这样体验才算是比较完整的,ok,首先,我们可以在上一个程序的基础上进行 扩展,qt的类名字都很直观,使得我们不需要借助手册,就可以猜到一些控件的类名(真的不知道可以打开Assistant查询), 于是一个程序转眼便敲入了,

编码:


代码如下:
#include <QApplication.h>
#include <QLabel.h>
#include <QWidget>
#include <QFont>
#include <QPushButton.h>
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
QWidget winform; //作为一个主窗体
QLabel label("<h1 style='color:blue'>Hello, QT</h1>",
&winform); // Label 显示hello信息
QPushButton button("OK", &winform); // 退出窗体按钮
winform.resize(200,150); //设置大小
label.resize(200,100);
button.setGeometry(10, 100, 150, 40);
button.setFont(QFont("宋体",10, QFont::Bold)); //设置字体
label.setAlignment(Qt::AlignCenter);
// 设置事件关联
QObject::connect(&button, SIGNAL(clicked()), &app, SLOT(quit()));
winform.show();
return app.exec();
}
这里大概只有几点需要说明:
1。这里的头文件和所用的类几乎是一一对应的,因此很容易理解。
2。任何一个Qt程序都得从一个叫QApplication的类对象开始,他引入来自入口函数main的参数,返回成员函数exec()的运行结果。
3。可以用于面板的控件有很多,就我们这样的需求,一个QWidget足够了。
4。QObject::connect(&button, SIGNAL(clicked()), &app, SLOT(quit()));这句代码确定了button控件需要响应的单击(click)事件和事件的处理函数(quit())的关联。


编译:


OK, 编码完成,保存为一个cpp文件(比如Qhello.cpp)到一个临时目录下(比如E:/tmp/),然后打开我们的命令行环境,进入这个临时目录,首 先,要建立一个Qt工程文件,输入命令qmake -project 回车后我们得到一个名叫qt.pro的工程文件,接着我们要建立makefile文件(这个文件会设定好每一个编译选项,以方便我们后来的编译),继续输 入命令qmake,这样我们就在该目录下看到了三个makefile文件:
Makefile.Debug:编译Debug版(即带Debug信息的版本,一般用于测试和调试)的编译选项。
Makefile.Release:编译Release版(即不带Debug信息的版本,一般用于产品的发布)的编译选项。
Makefile :上面两个文件的总聚合器,他用于直接响应make命令。
最 后在命令行里输入make命令,编译该工程,该工程默认生成的是Debug版程序,你可以在debug子目录下找到,如果需要更改源码,改完后,重新 make就可以了,如果没有加入新文件,无需更改makefile和工程文件。如果确定可以发布,可以输入make release命令来生成Release版本(在Release子目录下)。


运行结果:




原创粉丝点击