1、2018年9月11日,第13章Qt图形界面程序设计,2018年9月11日,主要内容,Qt的作用 Qt简介 基本Qt程序示例 项目文件 利用qmake编译程序 应用消息/槽的Qt程序示例 程序结构 界面布局 程序编译,2018年9月11日,Qt的作用,Qt工具包在XWindows中的作用 和Gtk+一样,是Xlib之上更高层的开发工具包,它们将底层的Xlib的API进行封装,提供更高级的接口,达到降低开发难度,提高开发效率的目的。,2018年9月11日,Qt简介,良好的可移植性: X11:即运行在X Windows的系统,包括linux、unix等; windows系统:包括windows95/
2、98/Nt/2000/Xp/2003等; Macintosh系统:Max OS X; 嵌入式系统; 辅助工具 Qmake:简化编译过程 QtAssist:定位帮助信息 QtDesigner:辅助界面设计,2018年9月11日,Qt简介,Qt的维护与许可制度 不是由软件组织和基金会维护; 由Trolltech国际化的公司维护; Q Public License (QPL)的许可协议; General Public License(GPL)版本 ; 双许可证(Dual Licensing)的版本 商业软件 非商业软件,2018年9月11日,Qt简介,界面元素的组织: 以类继承的结构组织; 基类:Q
3、Widget; 事件与事件处理程序的关联: 重载已有的事件处理程序; 适合于已经存在的事件处理函数 利用信号/槽的机制关联信号(事件)和信号对应的事件。 信号(signal)是对象(类)向外界发送的任意消息、事件,不仅仅是界面元素产生的一般消息(鼠标、键盘等)。 槽(slot)是可以接收消息的特殊函数。,2018年9月11日,基本Qt程序,程序运行效果组成: 一个窗口 一个字符串 动作: 运行显示窗口 关闭退出,2018年9月11日,程序清单,2018年9月11日,程序编译,项目文件hello.pro项目文件格式: 基本格式:变量名 值 TEMPLATE app 含义:生成一个可执行文件 其它
4、取值:lib,subdirs,vcapp,vclib;,2018年9月11日,程序编译,含义: lib:生成库文件 subdirs:生成某个目录下的编译指导文件; vcapp:生成vc+支持的可执行程序; vclib:生成vc+支持的库文件。 INCLUDEPATH += . 含义:将当前目录增加到头文件的搜索路径中去 CONFIG += qt warn_on release 含义:将CONFIG变量的值增加三个字符串 其它取值: qt:生成的目标是基于Qt库的应用程序或者程序库; debug:编译时打开调试信息; release:编译时进行代码优化; warn_on:编译时尽量多地报告警告信
5、息; warn_off:编译时仅报告严重的警告信息;,2018年9月11日,程序编译,程序编译,2018年9月11日,程序编译,命令分析 必需的命令: qmake hello.pro :根据项目文件生成Makefile make:根据生成的Makefile编译代码生成可执行文件hello 生成的文件: Makefile:指导make进行编译的文件 hello.o:编译源文件得到的目标文件 hello:将目标文件链接后得到的可执行文件 程序运行: 通过输入可执行文件名运行: ./hello 得到程序界面,2018年9月11日,使用信号/槽的Qt程序示例,程序运行界面绿色:按钮(QPushButt
6、on ) 红色:LCD数码显示(QLCDNumber ) 蓝色:编辑框(QLineEdit ,QMultiLineEdit ) 黄色:自定义界面元素(MyWidget),2018年9月11日,使用信号/槽的Qt程序示例,界面设计思路 整个界面为一个界面元素; 类型:MyWidget 基类:QWidget 其它元素组合在MyWidget上; 界面元素: quit start go lcd edit medit 界面布局网格布局grid (QGridLayout ) 元素之间通过信号/槽进行通讯,2018年9月11日,使用信号/槽的Qt程序示例,程序结构 主函数:main() 功能:启动消息循环,
7、显示程序界面 两个类: 类:Puzzle 功能:完成产生随机数,并进行判断 类:MyWidget 功能:定义并放置界面元素,接受用户输入; 5个文件: main.cpp:定义主函数 puzzle.h,puzzle.cpp:定义并实现类Puzzle mywidget.h,mywidget.cpp:定义并实现类MyWidget,2018年9月11日,使用信号/槽的Qt程序示例,文件目录结构,2018年9月11日,类结构,类Puzzle的结构 符号含义: :共有,public :私有,private 成员说明: answer:猜数字的答案; gen_answer():产生随机数答案; get_ans
8、wer():返回答案值; judge():将用户的猜测和答案比较,得出比较结果; start():开始,调用过程产生答案;,2018年9月11日,类结构,类MyWidget结构 符号含义: +、-、#:共有、私有、保护 三角:继承关系 红色:型号 绿色:槽 成员说明: quit、start、lcd、edit、go、medit:界面上的元素 grid:网格布局 count:用户猜测的次数 guess:用户的猜测 puzzle:对象,完成产生随机数,并判断的功能,2018年9月11日,类结构,成员说明: closeEvent:重载基类的方法; init():游戏初始化; finalize():游戏
9、结束的动作 getAnswer():得到用户输入的答案 showMsg():根据用户的猜测,给出提示信息 onStart():用户点击start按钮的动作 onGo():用户点击go按钮的动作 onClose():用户点击关闭按钮的动作 closeSignal():程序关闭时,产生的信号。,2018年9月11日,界面布局,本例中为4行3列的布局 坐标编码方式和Gtk+略有不同,2018年9月11日,界面布局,向容器中放置界面元素的两个方法 占据一个单元格 void QGridLayout:addWidget ( QWidget * w,/欲放置的界面元素 int row,/行编号 int co
10、l,/列编号 int alignment = 0 );/对齐方式 占据多个单元格 void QGridLayout:addMultiCellWidget ( QWidget * w,/欲放置的界面元素 int fromRow,/起始行编号 int toRow, /终止行编号 int fromCol, /起始列编号 int toCol, /终止列编号 int alignment = 0 );,2018年9月11日,界面布局,元素位置参数取值,2018年9月11日,项目文件,增加的路径: 目录:mywidget 文件:mywidget目录下的头文件和cpp文件,2018年9月11日,程序编译,可执行文件,2018年9月11日,课后练习,1、简述qt在X Windows系统中的地位。 2、比较qt和gtk+关联消息的方式。 3、以qt为基础,现在有哪些已经比较成熟的应用应用软件项目? 4、简述qt所使用的许可证特点。 5、利用qt编一个图形界面程序,至少用到窗口、按钮和一种布局。,