本书着重于讲解利用Qt开发图形界面的基础知识。主要包括集成开发环境Qt Creator的使用、基本控件、菜单和工具栏、对话框、界面布局、事件系统、二维绘图、样式表的使用等。基本覆盖了在Qt开发平台下开发桌面窗口界面的知识, 讲述简单实用、步骤详尽, 非常适合于课堂讲解少而练习时间多的授课方式, 适合于在翻转式教学模式下引导学生自我学习。也十分易于一般读者自学。
Qt是基于C++语言的著名的跨平台开发框架,自20世纪90年代出现以后,不断发展壮大,现在已经发展成为强大的、几乎全功能的开发框架。它不仅可以用于开发用户界面,还可以进行数据库、网络、多媒体、嵌入式等方面的编程开发,但是Qt最侧重的,历史最悠久的仍然是GUI图形界面开发。Qt开发的程序可以运行于Windows、Linux、UNIX等主流操作系统,只要没有调用专属于某个操作系统的功能,Qt开发的源程序一般不用修改,只需将它的源码在不同的操作系统下编译后即可执行,真正达到了“一次编写,处处编译”的境界。
全书共分10章。
第1章和第2章讲述C++语言面向对象的基础知识。因为本书假定读者了解C语言的编程基础,所以这里用两章的篇幅介绍面向对象的知识,包括类和对象、类的继承和多态等方面的知识。
第3章介绍Qt的安装、Qt Creator的基本使用、信号与槽通信机制,以及编程中常用的几个基本字符串类。
第4章讲解基础窗口类以及各种常用的界面控件,包括按钮、标签、单选按钮、检查框、组合框、列表框、编辑框、进度条、选项卡、树状控件、表格控件、富文本控件等。这些控件可以方便地构造图形界面。
第5章讲解菜单、工具栏和状态栏的基础知识,以及对话框的基础知识。了解手工编程和利用设计器构建菜单的差异,了解模态、非模态对话框的不同之处。
第6章介绍控件布局管理、窗口切分与停靠、单文档与多文档界面的实现方式。有了布局管理的知识,就可以灵活高效地安排控件的位置并使之随界面大小而动态变化。大大简化了界面编程的强度。
第7章介绍事件系统的基本知识。窗体程序的一举一动全由事件驱动,鼠标操作、键盘操作、定时发生的动作、界面重绘等全是事件,有了事件概念并且适当地利用事件处理机制编写程序是界面编程的要点之一。
第8章讲解二维绘图系统。画笔、画刷的利用和图形绘制是界面编程中不可或缺的内容,坐标变换和特殊填充方式体现了Qt二维绘图功能的强大。
第9章介绍利用样式表美化界面的方法。在Qt中利用类似于网页CSS脚本的QSS脚本可以直接设定各种控件的大小、颜色、背景等属性,极大地方便了界面的美化。
第10章给出3个编程实例——接金币、俄罗斯方块、游戏大厅界面。通过这些范例让读者进一步了解界面编程所需要的综合能力。
由于本书内容广泛,加上编写时间仓促,以及作者水平有限,书中可能有错误及不合理之处,恳请读者指正。
仇国巍
2017年1月
第3章初识Qt开发框架
3.1Qt的历史渊源 Qt是1991年由挪威的奇趣科技(Trolltech)公司开发的跨平台C++图形用户界面(GUI)应用程序开发框架。2008年,奇趣科技公司被诺基亚公司收购,Qt也因此成为诺基亚公司旗下的编程语言工具,曾称霸一时的Symbian手机操作系统就是基于Qt开发的。2012年,Qt被芬兰软件公司Digia收购。 Qt最早在Linux系统上大放异彩,它是Linux著名的桌面系统KDE的开发平台。后来又被很多软件公司用来开发重量级产品,其中包括三维动画软件Maya、办公套件WPS、即时通信软件Skype等。它既可以开发GUI程序,也可用于开发非GUI程序。 目前Qt在不同的行业中都取得了不小的成绩,例如能源、医疗、军工和国防、汽车、游戏动画和视觉效果、芯片、消费电子、工业自动化、计算机辅助设计和制造等。以华为公司、中石油公司为代表的客户已经说明了Qt实力的雄厚。 历经二十多年不断发展进步,Qt已经发展成为一个完善的C++开发框架,可以开发出强大的、互动的并且独立于平台的应用程序。Qt的应用程序可以在本地桌面、嵌入式和移动主机系统上运行,其具有的性能远远优于其他跨平台的应用程序开发框架。 Qt具有下列突出优点: 优良的跨平台特性。
Qt支持的操作系统包括Microsoft Windows、Apple Mac OS X、Linux/X11,Embedded Linux、Windows Embedded、RTOS以及手机上的Android、IOS等。 面向对象。Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signal/slot(信号/槽)的通信机制,这使得各个元件之间的协同工作变得更为简单和安全。 丰富的 API。Qt包括多达 250 个以上的C++类,除了用于用户界面开发,还可用于文件操作、数据库处理、网络通信、2D/3D图形渲染、XML操作等。
3.2安装Qt开发系统〖*4/5〗
3.2.1Qt系统下载Qt系统可以在官方下载网站http://download.qt.io/archive或者中文的Qtcn开发网http://www.qtcn.org上下载。 本书采用的是qt.opensource.windows.x86.mingw482_opengl.5.3.2.exe软件包,也就是Qt 5.3.2版本,其官方下载界面如图3.1所示。由于在Qt发展过程中,其结构有时会有较大变动,因此在本书学习过程中,请尽量选用Qt 5.3或更新的版本。 图3.1Qt系统官方下载界面 Qt本质上是一套C++类库,用于编写C++源程序。Qt本身没有C++的编译系统,而是采用开源的MinGW(基于gcc、gdb)或者微软公司的msvc编译系统。本书采用整合MinGW的软件包,该软件包无须微软公司的VC 2012或VC 2013开发环境的支持。图3.2在Qt安装界面上选择组件 在安装过程中有一步是选择组件,这时一定要将Tools中的MinGW 4.8.2选中,如图3.2所示。另外,在选择软件授权协议的界面,选择LGPL协议(GNU宽通用公共许可证)即可。其他步骤可按默认方式操作。安装完成后,Qt类库、集成开发环境Qt Creator、官方例程以及MinGW系统就一并安装好了。
3.2.2Qt Creator简介 除了可以用手工方式编写基于Qt的程序代码,也可以使用官方开发的集成开发环境Qt Creator。Qt Creator提供了图形化的界面设计器Qt Designer,该工具提供了Qt基本的窗体部件,如QWidget(基本窗口)、QLabel(标签)、QPushButton(按钮)等,可以在设计器中通过鼠标直接拖曳这些窗口部件并将其布置到窗口界面中,从而实现所见即所得的设计。 Qt Creator启动界面如图3.3所示。它的中间部分是主窗口,上部是菜单栏,左侧工具栏主要是模式选择器和一些常用按钮。 图3.3Qt Creator启动界面
1. 菜单栏(Menu Bar) 菜单栏包括以下8个菜单。 “文件”菜单: 包含新建、打开、关闭项目和文件,打印文件和退出等基本功能。 “编辑”菜单: 包含撤销、剪切、复制、查找等常用功能,在高级菜单中还有标示空白符、折叠代码、改变字体大小等功能。 “构建”菜单: 包含构建和运行项目等相关的功能。 “调试”菜单: 包含调试程序等相关的功能。 “分析”菜单: 包含QML分析器、Valgrind内存分析器等功能菜单。QML是Qt开发团队创立的一种脚本语言,可以通过描述的方式创建窗体程序。QML分析器可以分析一段脚本执行过程中出现的问题。而Valgrind是一个免费的工具包,用来检测程序运行时内存泄露、越界等问题。 “工具”菜单: 提供了快速定位菜单、版本控制工具菜单和界面编辑器菜单等。其中的“选项”菜单中包含Qt Creator各个方面的设置选项,包括环境设置、快捷键设置、编辑器设置、帮助设置、Qt版本设置、Qt设计师设置和版本控制设置等。 “控件”菜单: 包含设置窗口布局的一些菜单项,如全屏显示和隐藏边栏等。 “帮助”菜单: 包含Qt帮助、Qt Creator版本信息和插件管理等菜单项。
2. 模式选择器( Mode Selector ) Qt Creator包含欢迎、编辑、设计、调试(Debug)、项目、分析和帮助6个模式,各个模式完成不同的功能。也可以使用快捷键来更换模式,对应的快捷键依次是Ctrl+1~6。下面简单介绍主要的几种模式。 编辑模式: 主要用来查看和编辑程序代码,管理项目文件。Qt Creator的编辑器具有关键字特殊颜色显示、代码自动补全、声明定义间快捷切换、函数原型提示、Fl键快速打开相关帮助和在项目中进行查找等功能。 设计模式: 整合了Qt设计师的功能。可以在这里设计图形界面,进行部件属性设置、信号和槽设置、布局设置等操作。 调试模式: Qt Creator默认使用gdb进行调试,支持设置断点、单步调试和远程调试等功能,包含局部变量、监视器、断点、线程以及快照等查看窗口。 项目模式: 包含对特定项目的构建设置、运行设置、编辑器设置和依赖关系等页面。构建设置中可以对项目的版本、使用Qt的版本和编译步骤进行设置;编辑器设置中可以设置文件的默认编码。
3. 常用按钮 Qt Creator启动界面左下角包含目标选择器、运行按钮、调试按钮和构建全部项目4个按钮图标。目标选择器用来选择要构建哪个平台的项目,这对于多个Qt库的项目很有用。还可以选择编译项目的debug版本或release版本。运行按钮可以实现项目的构建和运行。调试按钮可以进入调试模式。构建全部项目按钮可以构建所有打开的项目。
3.3创建一个简单程序 本节以手工编码和图形化操作方式建立两个同样的“Hello Qt!”程序。 注意: 在建立项目时,项目的路径和名称都不要使用中文。
3.3.1手工编码方式 【例3.1】利用手工编码方式建立“Hello Qt!”程序。 第1步,利用Qt Creator的菜单“文件→新建文件或项目”打开新建对话框,选择“其他项目→空的Qt项目”建立一个名为3_1的工程。这时工程中除了名为3_1.pro工程文件外无任何其他文件。 第2步,再次打开新建对话框,选择C++项目下的C++ Source File,添加一个C++源程序q1.cpp(名称可以任取)。 第3步,单击打开工程文件3_1.pro,在末尾行添加文字: QT +=widgets。这样便可以在工程中使用可视化的部件。 第4步,在源程序q1.cpp中添加如下代码: 1#include 2#include 3#include 4int main(int argc, char argv\[\]) 5{ 6QApplication a(argc,argv); 7QDialog w; 8QLabel label(&w); 9label.setText("Hello Qt!"); 10label.setGeometry(10,10,100,100); 11w.show(); 12return a.exec(); 13}图3.4工程3_1运行界面 至此,一个完整的Qt程序就完成了。
单击运行按钮(图标为,对应快捷方式为Ctrl+R键),即可得到图3.4所示的窗体。 代码说明: 第1~3行包含了头文件。其中2、3两行说明可使用对话框类和标签类。 第4行是C++中的main函数,它有两个参数,用来接收命令行参数。 第6行新建QApplication类对象,用于管理应用程序的各种设置,并执行事件处理工作,任何一个Qt GUI程序都要有一个QApplication对象。该对象需要argc和argv两个参数。 第7行新建一个QDialog对象,实现一个对话框界面。 第8行新建了标签QLabel对象,并将QDialog对象w作为参数,表明对话框w是它的父窗口,也就是说这个标签放在对话框窗口中。 第9行给标签设置要显示的字符。 第10行设置标签相对于对话框的位置和大小,使用了函数void setGeometry(int x,int y,int w,int h),其中x、y设置标签在对话框中的坐标,w为宽,h为高。GUI控件都有这个函数。 第11行将对话框显示出来。在默认情况下,窗口部件对象是不可见的,要使用show函数让它们显示出来。 第12行的exec函数让QApplication对象进入事件循环,这样Qt应用程序在运行时便可以接收产生的事件,例如鼠标单击和键盘按下等事件。
3.3.2无UI的向导方式 所谓UI是指程序界面描述文件,可用于可视化界面设计。 【例3.2】利用无UI的应用程序向导建立“Hello Qt!”程序。 第1步,建立无UI的工程。 ……