目录
《Linux 环境下 Qt4 图形界面与 MySQL 编程》 ............................................................................ 4
前言................................................................................................................................................... 4
第一章 绪论 ................................................................................................................................... 5
1.1 图形界面设计的必要性 .................................................................................................. 5
1.2 Linux 常用的图形化界面编程工具 ................................................................................ 6
1.2.1 Qt........................................................................................................................... 6
1.2.2 GTK+ ...................................................................................................................... 7
1.3 两种常用的 Linux 数据库 ............................................................................................. 8
1.3.1 MySQL ................................................................................................................... 8
1.3.2 SQLite .................................................................................................................... 8
1.4 图形界面与数据库综合编程技术 .................................................................................. 9
第 2 章 Qt4 图形界面编程基础 .................................................................................................. 10
2.1 Qt Creator ...................................................................................................................... 11
2.2 安装 Qt 环境及 Qt Creator(1) ................................................................................. 11
2.3 信号和槽机制................................................................................................................ 17
2.4 一个抛砖引玉的实例(1) .......................................................................................... 19
第 3 章 Qt4 控件与示例精讲 ...................................................................................................... 24
3.1 布局(Layouts) ................................................................................................................. 25
3.1.1 绝对布局 ............................................................................................................. 25
3.1.2 手工布局 ............................................................................................................. 26
3.1.3 Qt 布局管理器 .................................................................................................... 27
3.2 间隔器(Spacers) ............................................................................................................. 29
3.3 按钮(Buttons) ................................................................................................................ 30
3.3.1 PushButton 控件 ................................................................................................. 31
3.3.2 RadioButton 控件 ............................................................................................... 32
3.3.3 CheckBox 控件 .................................................................................................... 33
3.3.4 示例 1:PushButton、RadioButton 和 CheckBox 控件的综合应用(1) ...... 35
3.3.5 ToolButton 控件 ................................................................................................. 42
3.3.6 示例 2:ToolButton 的应用(1)..................................................................... 43
3.3.7 CommandLinkButton 控件 ................................................................................. 47
3.3.8 示例 3:CommandLinkButton 的应用(1) .................................................... 49
3.3.9 ButtonBox 控件 .................................................................................................. 55
3.3.10 示例 4:ButtonBox 的应用(1).................................................................... 57
3.4 单元视图(Item Views) ................................................................................................... 61
3.4.1 ListView 控件 ...................................................................................................... 62
3.4.2 示例 5:ListView 的应用 ................................................................................... 63
3.4.3 TreeView 控件(1) .......................................................................................... 67
3.4.3 TreeView 控件(2) .......................................................................................... 68
3.4.4 示例 6:TreeView 的应用(1) ....................................................................... 69
3.4.5 TableView 控件(1) ......................................................................................... 74
3.4.6 示例 7:TableView 的应用 ................................................................................ 76
1
3.4.7 ColumnView 控件 ............................................................................................... 79
3.5 单元组件(Item Widgets) ............................................................................................... 80
3.5.1 ListWidget 控件(1) ........................................................................................ 81
3.5.2 TreeWidget 控件(1) ....................................................................................... 83
3.5.3 TableWidget 控件(1) ..................................................................................... 88
3.5.4 示例 8:TableWidget 的示例 ............................................................................ 93
3.6 容器(Containers) ............................................................................................................ 98
3.6.1 GroupBox 控件.................................................................................................... 99
3.6.2 ScrollArea 控件 ................................................................................................. 100
3.6.3 示例 9:GroupBox 和 ScrollArea 的示例(1) .............................................. 101
3.6.4 ToolBox 控件..................................................................................................... 105
3.6.5 示例 10:ToolBox 的应用 ................................................................................ 108
3.6.6 TabWidget 控件(1) ...................................................................................... 115
3.6.7 示例 11:TabWidget 的应用(1) ................................................................. 119
3.6.7 示例 11:TabWidget 的应用(2) ................................................................. 121
3.6.8 StackedWidget 控件 ......................................................................................... 124
3.6.9 示例 12:StackedWidget 的应用 .................................................................... 125
3.6.10 Frame 控件 ..................................................................................................... 129
3.6.11 Widget 控件 .................................................................................................... 131
3.6.12 MdiArea 控件.................................................................................................. 132
3.6.13 示例 13:MdiArea 的应用(1) ................................................................... 135
3.6.14 DockWidget 控件 ............................................................................................ 140
3.6.15 示例 14:DockWidget 的示例 ....................................................................... 142
3.7 输入组件(Input Widgets) ............................................................................................ 147
3.7.1 ComboBox 控件 ................................................................................................ 148
3.7.2 Font ComboBox 控件 ........................................................................................ 151
3.7.3 LineEdit 控件 ..................................................................................................... 152
3.7.4 TextEdit 控件 .................................................................................................... 154
3.7.5 PlainTextEdit 控件 ............................................................................................ 155
3.7.6 示例 15:ComboBox、LineEdit 和 TextEdit 的应用(1) ............................. 156
3.7.7 SpinBox 控件 ..................................................................................................... 161
3.7.8 Double SpinBox 控件 ........................................................................................ 163
3.7.9 Slider 控件 ........................................................................................................ 165
3.7.10 示例 16:SpinBox、Double SpinBox 和 Slider 的应用(1) ....................... 167
3.7.11 Dial 控件 ......................................................................................................... 171
3.7.12 示例 17:Dial 的应用 .................................................................................... 173
3.7.13 ScrollBar 控件 ................................................................................................. 175
3.7.14 DateEdit 控件 .................................................................................................. 177
3.7.15 TimeEdit 控件 ................................................................................................. 179
3.7.16 DateTimeEdit 控件 .......................................................................................... 181
3.7.17 示例 18:DateEdit、TimeEdit 和 DateTimeEdit 的应用(1)..................... 182
3.8 显示组件(Display Widgets) ......................................................................................... 188
3.8.1 Label 控件 ......................................................................................................... 189
3.8.2 TextBrowser 控件 ............................................................................................. 191
2
3.8.3 示例 19:TextBrower 的应用 .......................................................................... 193
3.8.4 GraphicsView 控件 ........................................................................................... 196
3.8.5 示例 20:GraphicsView 的应用(1)............................................................. 200
3.8.6 Calendar 控件 ................................................................................................... 205
3.8.7 示例 21:Calendar 的应用 .............................................................................. 208
3.8.8 LCDNumber 控件 .............................................................................................. 212
3.8.9 示例 22:LCDNumber 的应用 ......................................................................... 214
3.8.10 ProgressBar 控件 ............................................................................................ 217
3.8.11 示例 23:ProgressBar 的应用(1) ............................................................. 219
3.8.12 Line 控件 ......................................................................................................... 225
3
《Linux 环境下 Qt4 图形界面与 MySQL 编程》
前言
Linux 操作系统作为源码开放的自由软件,经过近 20 年的发展与壮大,越来越受到 IT
界的认可,在信息技术领域发挥着重要作用。图形界面是 Linux 走向成熟的重要支撑技术,
备受众多开发者的重视。在每个工程项目中,几乎都离不开数据库技术。因此,稳定的 OS、
友好的图形界面和完善的数据库技术构成了一个完整的工程项目。
面对 Linux 操作系统图形界面与数据库编程,很多学习者不知道如何下手。本书正是在
这种背景下编写的,紧紧围绕本书的写作主线“图形界面编程控件与数据库编程基础→简单
易学的实例→实际工程项目开发与场景分析”,以当前最新的 Qt4.7 为依据,采用“深入分
析控件+实例解析”的方式,并配合经典的实际工程项目,对 Linux 操作系统下的 Qt4.7 与
MySQL 编程技术进行了全面细致的讲解。本书主要分为以下三大部分:
Linux 图形界面编程基础。介绍 Qt4.7 的全部控件,并针对每个控件设计了一个简单易
学的实例,抛砖引玉,加深读者对 Qt4.7 控件的认识和理解。
基于 Linux 操作系统的 MySQL 数据库设计基础。介绍 MySQL 基本操作,并针对每个操作
设计了一个简单易学的实例,抛砖引玉,加深读者对 MySQL 操作的认识和理解。
基于 Qt4.7 与 MySQL 的经典的实际工程项目案例开发。在本书中设计了列车时刻表查询
系统、酒店客房管理系统、房屋租赁系统、书店管理系统、学生上机考试系统、校园点菜系
统、餐饮信息服务系统、视频音频播放器、桌面常用软件小助手、俄罗斯方块游戏和局域网
聊天系统。这些案例给读者提供了实际工程项目开发参考。
在本书的编写过程中,参考和借鉴了很多资料,它们为本书的编写和实验例程的解决方
案提供了重要的指导作用。本书中的范例源代码可以到华章网站(www.hzbook.com)下载。
本书主要由邱铁、周玉、张民垒等完成编著任务。在此,感谢所有参与本书构思、解决
方案、编辑和出版工作的同事、同行和为本书编写提供灵感的同志们,其中马利超参加了代
码调试和部分文档整理,陈方疏、易磊、刘继伟、王革正、陈坚、宋莉莉、张涛、郝若男、
刘晗、张晓彤、王宇辰、高凡等在课程设计中的构思被本书采纳,并被设计成典型案例,向
他们表示感谢。
开源项目还在向前飞速发展,Qt 与 MySQL 版本还在不断更新,书中难免存在错误和不
妥之处,恳请读者批评指正,并将信息发送到 openlinux2011@gmail.com,我们会尽力及时
答复。——编者。
4
第一章 绪论
《Linux 环境下 Qt4 图形界面与 MySQL 编程》本书以“图形界面编程控件与数据库编程
基础→简单易学的实例→实际工程项目开发与场景分析”为写作主线,以当前最新的 Qt4.7
为依据,采用“深入分析控件+实例解析”的方式,并配合经典的实际工程项目,对 Linux
操作系统下的 Qt4.7 与 MySQL 编程技术进行了全面细致的讲解。本节为大家介绍图形界面设
计的必要性。
本章目的:
了解图形界面设计的必要性
认识几种常用的图形化界面编程工具
认识几种常用的 Linux 数据库技术
图形界面与数据库综合编程
1.1 图形界面设计的必要性
在信息技术高速发展的今天,无论是 PC 应用软件还是嵌入式设备,人们对软件的友好
支持性要求逐渐提高,因此出现了图形用户界面(Graphical User Interface,GUI)技术。
它是一种综合了计算机技术、美学、心理学、行为学以及各商业领域需求分析的人机系统工
程,强调“人—机—环境”三者作为一个系统进行总体设计。图形用户界面技术的出现,改
变了传统的采用终端命令行显示与控制的方式,从可视化、交互性和友好性等方面带来了极
大的优越性。
控件功能的可视化。在图形用户界面编程工具中,将不同的用户需求做成控件的形式,
在编程时,可以从控件库中选择相应的控件进行设置,从而达到自己的功能需求。每个控件
的功能都能直观地显示出来,具有良好的可视化效果。
图形用户界面建立了与用户的互动交流。采用终端作为控制,可操作性差。当程序执行
时,与用户的交互性差。图形用户界面技术将用户与程序执行过程控制紧密结合起来,从而
使用户的需求及时地在图形用户界面中得以实施并直观地显示出来。
用户界面友好性。图形用户界面的设计要考虑人的行为学和心理学特点,符合用户的习
惯,并在美学方面达到和谐统一。使用户操作方便,给人以舒适的感觉。
5
1.2 Linux 常用的图形化界面编程工具
本节介绍在 Linux 操作系统中编程时,常用的两种编程工具:Qt 和 GTK+。
1.2.1 Qt
Qt 是一个跨平台的图形界面开发平台,最早由挪威的 TrollTech 公司于 1992 年进行开
发。2008 年 6 月,NOKIA 公司获得了 Qt 的开发权,继续对 Qt 平台进行开发。Qt 图形界面
开发平台可进行嵌入式系统应用程序和桌面系统应用程序的开发,支持 Windows、Linux/X11、
Mac OS X 等操作系统。Qt 官方网页:http://qt.nokia.com/,如图 1-1 所示。
Qt 采用 C++语言,包含了丰富的 C++类,包括窗口界面设计的接口、IO 控制接口、绘图
接口、多媒体接口、数据库操作接口、网络通信接口、XML 接口、模块测试接口等丰富的开
发接口。软件开发人员通过使用这些接口,可以方便、高效地完成应用设计与程序开发。由
于采用 C++语言,Qt 具有较高的执行效率。此不同平台间的 Qt 开发接口是相同的,因此,
可以有效地降低 Qt 应用程序跨平台开发的移植成本。
6
Qt 不仅仅是一个图形界面开发类库,而是一套拥有相对完整的开发环境的开发工具。Qt 提
供了丰富的开发工具,用来提高应用设计开发人员的编程效率。这些工具主要包括:界面设
计工具 Qt Designer、工程管理工具 qmake 等。在最新的 Qt4.5 及以上的版本中还加入了 Qt
程序开发的 IDE 环境 Qt Creator,以及与其他开发工具的扩展插件,可以支持 Visual Studio
和 Eclipse 等常用开发工具。本书的实例都是基于使用 Qt4.7 的 Creator 集成开发环境而编
写的。
NOKIA 公司收购 TrollTech 公司后,推出了两个重要版本:
Qt 商业版:主要面向商业软件开发。这些软件用于商业用途时,需要支付一定的费用,并
在有效的时间段内得到一定的技术支持。
Qt 开源版:源码开放,遵循 GNU 通用公共许可证(General Public License,GPL),可以进
行自由开发。
1.2.2 GTK+
GTK+来源于 GNU Image Manipulation Program(GIMP)(这是一个 GNU 开放源码项目),
由 Peter Mattis 和 Spencer Kimball 共同开发。
确切地说,GTK+是一个图形用户界面开发工具库。利用这个工具库可以创建基于图形用户界
面的应用程序,也就是说,GTK+集成程序员编程时需要用的控件库,利用这些库可以创建用
户所需要的图形界面。GTK+是从 GTK 中分离出来的,“+”代表了 GTK+具有很好的扩展性和
支持面向对象技术。关于 GTK+的详细内容,感兴趣的读者可以参阅 GTK+的官方网站:
http://www.gtk.org/,如图 1-2 所示,本书不作过多的讨论。
7
1.3 两种常用的 Linux 数据库
1.3.1 MySQL
MySQL 由瑞典的 MySQL AB 公司开发,是一个中小型数据库管理系统。在 2008 年被 Sun 公司
收购,成为 Sun 旗下的产品。2009 年,Sun 又被 Oracle 公司并购。目前,MySQL 是 Oracle
公司的产品之一,其 LOGO 如图 1-3 所示。MySQL 是一种关系数据库管理系统,它将数据保
存在一个个数据表中,大大地提高了数据操作效率。MySQL 支持 SQL 语言访问数据库系统,
操作简便。MySQL 源代码遵循 GNU 通用公共许可证。源代码是开放的,利于设计者根据不同
的应用设计专用的解决方案。MySQL 广泛地应用于 Internet 上的中小型网站和嵌入式数据
库的开发。
1.3.2 SQLite
SQLite 代码量特别小,大约 3 万行,是一个轻量级的小型数据库系统,占用资源少,处理
速度快,最初是为嵌入式产品而设计的。其 LOGO 如图 1-4 所示。
8