《QT一个月 自学教程教学材料》由会员分享,可在线阅读,更多相关《QT一个月 自学教程教学材料(273页珍藏版)》请在金锄头文库上搜索。
1、目录 目 录第一章Qt简介51.1选择Qt库51.2 安装Qt库61.3 带你进入Qt的世界7第二章 创建对话框132.1 对话框132.2 深入信号和槽182.3 快速设计对话框202.4 可变形状的对话框262.5 动态对话框设计332.6 内置控件和对话框类33第三章 创建主窗口413.1 子类化QMainWindow423.2 创建菜单和工具条453.3 创建状态栏493.4 实现文件菜单513.5 使用对话框573.6 保存设置623.7 多文档633.8 启动画面66第四章 应用程序编写694.1 中央部件694.2从QTableWidget类继承694.3 载入和保存754.4
2、实现Edit菜单774.5 其它菜单项814.6从QTableWidgetItem类继承85第五章 创建自定义部件935.1 自定义部件935.2 从QWidget类继承955.3 将自定义部件集成到Qt Designer中103第六章 布局管理器1076.1 排列部件1076.2 分组布局1126.3 分割控件1146.4 滚动区域1176.5 可停靠控件和工具栏1196.6 多文档界面121第七章 事件处理1317.1 重写事件处理函数1317.2 事件过滤器1357.3 忙时响应138第八章 2D图形1418.1 绘图类QPainter1418.2 坐标变换145第九章 拖拽功能1559
3、.1 支持多拽1559.2 自定义拖拽类型1599.3 剪切板164第十章 数据视图类16510.1 使用数据视图类16610.2 预定义模型类172第十一章 容器类17911.1 顺序容器17911.2 关联容器18611.3 通用算法18811.4 字符串, 字符数组, 变量190第十二章 输入/输出19712.1 读写二进制数据19812.2 读写文本文件20212.3 遍历目录20712.4 嵌入资源208第十三章 进程与进程间通信21113.1 使用QProcess21113.2进程间通讯213第十四章 多线程21914.1 创建线程21914.2 同步线程22214.3与主线程通信
4、22914.4在次线程中使用Qt的类234第十五章 网络23715.1写FTP客户端23715.2写HTTP客户端24515.3 写TCP客户/服务器应用程序24815.4 发送和接收UDP数据报257第十六章 提供在线帮助26316.1 工具提示、状态提示和“What This?”帮助26316.2 利用Web浏览器提供在线帮助26516.3 将QTextBrowser作为简单的帮助引擎26716.4 使用Qt Assistant提供强大的在线帮助2701 第一章 Qt 简介第一章Qt简介l 选择Qt库l 可移植性l 带你进入Qt的世界1.1选择Qt库GUI工具包(或GUI库)是构造图形用户
5、界面(程序)所使用的一套按钮、滚动条、菜单和其它对象的集合。在UNIX系统里,有很多可供使用的GUI库,其中之一就是Qt库一个基于C+编程语言的工具包。由于Qt是基于C+,因此它具有速度快,易于使用,可移植性好的特性。所以,当需要开发UNIX或MS Windows环境下的GUI程序时,Qt是最佳选择。1.1.1可移植性Qt不只是适用于UNIX,它同样适用于MS WINDOWS。如果你是一个以编程为生的程序员,那么你的目标一定是吸引尽可能多的用户,以使他们有机会购买你的产品。如果你的主要平台是MS WINDOWS,你很可能使用标准库MFC,但是你这样做,可能使你失去世界上几百万的UNIX用户。相
6、反,如果你的主要平台是UNIX,你可以使用其它工具包,如Gtk+或Xforms,但这样会使你失去更多的WINDOWS用户。那么,最好的方法就是选择一个既适用于WINDOWS又适用于UNIX的GUI工具包,Qt就是一个最好的选择。1.1.2 易用性如前所述,Qt是一个C+工具包,它由几百个C+类构成,你在程序中可以使用这些类,因为C+是面向对象的编程的语言,而Qt是基于C+构造。所以,Qt也具有OOP的所有优点。(OOP-ObjectOrientedProgramming 面向对象编程)1.1.3 运行速度Qt非常容易使用,且也具有很快的速度。这两方面通常不能同时达到。当我们谈论其他GUI开发包
7、时,易用常意味着低速,而难用则常意味着快速(或者从另一个方面讲,低速意味着易用,而快速则意味着难以使用),但当谈论Qt时,其易用性和快速是密不可分的,这一优点要归功于Qt开发者的辛苦工作,他们花费了大量时间来优化他们的产品。Qt比其他许多GUI工具包运行速度快的另一原因是它的实现方式,Qt是一个GUI仿真工具包,这意味着它不使用任何本地工具包作调用。Qt使用各自平台上的低级绘图函数仿真MS Windows和Motif(商用UNIX的标准GUI库),当然,这能够提高程序速度。其他适用于多种平台上的工具包,如wxWindows,则是适用API层或API仿真,这些方法均以不同的方式使用本地工具包,从
8、而降低程序的运行速度。1.2 安装Qt库Qt安装过程非常简单。本节介绍怎样在UNIX/Linux系统上安装Qt。1.2.1 编译和安装从站点下载最新的qt-x11-4.4.3的开发包,然后自己编译它。这样能够确保Qt库被正确安装,并且保证所安装的软件版本包含来自Troll Tech公司的最新功能和改进。现在可以开始下载。当下载窗口从屏幕消失后,下载完成,便可以开始安转了。将最新下载的文件复制到/usr/local目录中,当然你也可以自己新建一个目录,我就把qt-x11-opensource-src-4.4.3.tar.gz复制到/QT目录下面。那下面进到QT目录下,并执行下面的命令。#tar
9、zxvf qt-x11-opensource-src-4.4.3.tar.gz该命令将文件解压到一个子目录中,然后将目录名字更改为qt-x11-4.4.3#mv qt-x11-opensource-src-4.4.3 qt-x11-4.4.3然后进入qt-x11-4.4.3目录中#cd qt-x11-4.4.3#./configure如果你想查看./configure的相关配置命令,可以输入#./configure help (查看配置)接下来就可以通过makefile来编译Qt库了当你看到Qt is now configured for building. Just run gmake.On
10、ce everything is built, you must run gmake install.Qt will be installed into /usr/local/Trolltech/Qt-4.4.3To reconfigure, run gmake confclean and configure你的confiure也就完成了,在执行configure的过程中,可能会出现错误,导致错误的原因或许是g+编译版本的问题,我使用的g+编译器版本是Linux自带的4.1.1版本的g+,可以顺利通过。下一步就是执行#make了(这是一个很漫长的过程)。经过漫长的等待,终于编译完了,紧接着执行
11、#make install然后设置环境变量打开/etc/profile或者.bashrc文件,在文件末尾加上:export QTDIR=/usr/local/Trolltech/Qt-4.4.3export PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATHexport QMAKESPEC=$QTDIR/mkspecs/linux-g+现在我们的准备工作就已经做完了,下面就让我们进入QT的世界吧!1.3 带你进入Qt的世界1.3.1 Hello Qt我们通过一个简单的例子带你进入
12、Qt的世界。让我们先一行行的解读下面的代码,然后再编译,运行。1 #include 2 #include 3 int main(int argc, char* argv)4 5QApplication app(argc, argv);6QLabel *label = new QLabel(Hello Qt!);7Label-show();8return app.exec();9 第1,2行包含的头文件中声明了QApplication和QLabel类。对于每一个Qt类来说,它们的头文件名称总是与它们的类名相同。第5行创建了一个QApplication类的对象,来管理应用程序(或许这个地方用进程更
13、合适)资源。QApplication的构造函数,需要传入argc,argv参数,因为Qt支持命令行参数。第六行创建了一个QLabel的部件,用来显示“Hello Qt!”。用Qt和Unix的术语来说,部件就是用户接口中的一个可视化元素。按钮,菜单,滚动条等都是部件的实例。当然,一个部件中可以包含另一部件,比如,一个应用程序窗口(也是一个部件)通常就包含了菜单,工具栏,状态栏,和一些其他的部件。大多数应用程序都以QMainWindow和QDialog作为它们的主窗口。当然其他的部件也可以作为主窗口,这也是Qt的灵活之处。在上面的例子中,QLabel就是应用程序的主窗口。第7行代码使label变的
14、可见。部件在创建时,往往都是隐藏的,这样我们可以在让它可见之前设置参数,以免让窗口发生抖动。第8行通过exec( )函数将应用程序的控制权交给Qt。代码执行到这里时,程序进入事件循环。我们这里所说的事件,通常是指点击鼠标,和敲击键盘。程序会处理由于用户活动产生的事件。例如,当用户点击一个部件时,会产生鼠标按下和释放两个事件。在上面的代码中,我们并没有去释放label指针所指向的内存空间,这或许会令许多C+程序员感到不解,当然,您也不必费解,内存释放的事情已经由Qt在main函数结束时帮您完成了,这也是Qt值得称赞的地方,防止了由于部件而产生的内存泄露问题。OK,现在我们可以来试着编译,运行一下这个程序了。首先,要先安转好Qt 4.4.3的库(我想你已经完成了吧),并设置好环境变量,然后把hello.cpp的文件复制到hello的目录中。让我们进入hello的目录,并键入如下命令:qmake project生成一个与平台相关的工程文件,然后再键入:qmake hello.p