代码地址
说明
以下答案并非来自官方,而是本人自己实现的,若有啥问题,欢迎讨论(^-^)
所基于的书籍为《Qt图形界面编程入门》第一版 ISBN:978-7-302-46063-3
相关:《Qt图形界面编程入门》实验
目录说明
root
|-- chapter01
|-- demo:示例
|-- exercise:习题
|-- chapter02
|-- demo:示例
|-- exercise:习题
|-- chapter03
|-- demo:示例
|-- exercise:习题
|-- chapter04
|-- demo:示例
|-- exercise:习题
|-- chapter05
|-- demo:示例
|-- exercise:习题
|-- chapter06
|-- demo:示例
|-- exercise:习题
|-- chapter07
|-- demo:示例
|-- exercise:习题
chapter01
demo
exercise
建立一个时钟类,具有私有属性时、分、秒,它们用3个整型变量表示。
同时具有显示和设置时间的公有函数display和settime(int h1, int m1, int s1)。
该类还具有有参数构造函数。请设计时钟类,并在main函数中验证之。
定义并实现Ellipse类。采用椭圆的外接矩形左上角和右下角坐标表示椭圆(4个私有参数),
具有计算面积的公有函数、带参数的构造函数。函数形式自己定义。在主函数中使用构造函数初始化,
计算椭圆的面积并输出。在main函数中验证类的正确性。
定义并实现三角形类,其成员变量包括3个边长变量,成员函数包括构造函数、
计算面积函数以及是否构成直角三角形、锐角三角形核钝角三角形等函数。
- 若两短边平方和等于最长边的平方,即为直角三角形
- 若两短边平方和大于最长边的平方,即为锐角三角形
- 若两短边平方和小于最长边的平方,即为钝角三角形
在主函数中由用户输入3个边的值,先判断三角形是否合法,若合法则用构造函数生成一个对象。
输出对象的面积以及三角形的类型。
以下是运行样例。
输入:3 4 5
输出:面积6,是直角三角形
定义并实现一个有理数类Rational。该类包括如下特征信息:
- 私有成员分子top和分母bottom
- 有参数构造函数
- 当前对象加另一个有理数other的函数Add(Ration other),加法的结果保存在当前对象中
- 当前对象减另一个有理数other的函数Sub(Ration other),减法的结果保存在当前对象中
- 以“分子/分母”的形式输出有理数的函数Print
在main函数中验证类的正确性
chapter02
demo
- 人员(Person)类及其子类雇员类(Employee)的定义及使用
- 人员(Person)类的私有派生子类雇员类(Employee)的使用
- 派生类构造函数和析构函数的执行
- 派生类对象转换为基类对象使用
- 虚函数实现多态性
- 抽象Shape类的实现及使用
- 定义一个复数类,并重载加法运算符以适应对复数运算的要求
exercise
定义点类与彩色点类
定义一个空间中的点类Point作为基类,包括3个坐标值私有成员变量(整型变量x、y、z)和公有构造函数,
并增加显示变量值的公有成员函数Show。
定义一个空间中的彩色点类ColorPt作为派生类,并且包括一个颜色值私有成员变量(用字符数组表示)和公有构造函数,
再增加显示变量值的公有成员函数Show。
最后在主函数中定义点类和彩色点类的各一个对象,点类对象用(2,3,5)初始化,
彩色点用(10,20,30,“red”)初始化,调用Show函数显示信息。
运行样例如下。输入:(无输入)
输出:
2 3 5
10 20 30 red
创建基类Cellphone(普通手机类)及其子类Smartphone(智能手机类)。
基类包含品牌、本机号码两个私有属性,包括设置和获取属性值的函数(即setxxx和getxxx函数),
还包括接听电话、拨打电话的方法,其函数原型为void PickUp(int telNum); //接听来自telNum的电话 void Callsomebody(int telNum); //呼叫号码为telNum电话
上面两个函数仅显示一条动作信息,例如“接到1234567”打来的电话。
子类中还含有存储容量大小、屏幕大小属性,具有相应的设置和获取属性的函数,
还有一个播放音乐的函数,原型如下:void PlayMusic(char *mName); //播放音乐mName
这个函数也是仅显示一条动作信息。
修改例2-6的内容,在基类定义计算周长的纯虚函数,
在子类中实现计算周长的函数,并在主函数中使用这一功能。
虚函数综合练习。
定义基类——图形类Geometry及其派生类——矩形类、等腰直角三角形类。
矩形类有两个参数H和V,代表高和宽。等腰直角三角形类有参数E,代表直角边的长度。
基类中包括一个绘制图形的公有成员虚函数Draw,并且在派生类中分别实现函数Draw,
在该函数中用符号*显示图形。最后在主函数中定义子类的各一个对象并调用构造函数初始化,
再利用Draw函数分别显示它们的字符形状图。
运算符号重载
建立一个三维向量类,包含x、y、z3个整数属性,利用符号重载实现加号和减号的函数
运行样例如下。
输入s1内容:
第0个:10
第1个:20
第2个:30
输入s2内容:
第0个:9
第1个:8
第2个:7[s1-s2]内容为:1 12 23
[s1+s2]内容为:19 28 37
chapter03
demo
- 利用手工编码方式建立“Hello Qt!”程序
- 利用无UI的应用程序向导建立“Hello Qt!”程序
- 利用Qt设计器建立“Hello Qt!”程序
- 无图像用户界面的简单信号和槽的例子
- 使用控件内部定义好的信号和槽
exercise
- 习题1
请对比用无UI向导方式和用有UI的向导自动建立基于QDialog的程序时,编译运行后工程目录中各有哪些不同的文件,哪些文件是自动生成的,
这些自动生成的文件是如何被main函数使用的。
答:(个人观察,不一定是正确的)
无UI向导自动生成的文件会有demo02.pro
,dialog.h
,dialog.cpp
,main.cpp
,而main如何使用的,首先在main.cpp
中通过引入头文件#include "dialog.h"
将dialog相关的引入进入,然后在main函数的这行代码Dialog w
,调用dialog.h
头文件中Dialog
类的初始化,
而Dialog
的构造函数在dialog.cpp
中定义。
有UI向导自动生成的文件会有demo03.pro
,dialog.h
,dialog.cpp
,main.cpp
,dialog.ui
,main中使用首先也是Dialog w
,
这句代码,这句会引用dialog.h
中的构造函数,而构造函数在dialog.cpp
进行类外定义,而在构造函数中通过使用ui(new Ui::Dialog)
给内嵌对象ui初始化,
而这句代码调用ui_dialog.h
中的构造函数。
例3-5中的标签QLabel对象可以通过setText函数设置显示内容,并且setText函数本身是一个槽函数,可以接收信号。
仿照例3-5编写程序,标签对象初始化显示0,每次单击标签对象后,其显示内容就加1,依次变为1、2、3等。
chapter04
demo
- 窗体几何尺寸的设置和获取
- 窗口标题及大小控制
- 用标签显示位图
- 按钮的使用
- 单选按钮、复选框的使用
- 组合框的使用
- 列表框的使用
- 单行编辑框的使用
- 滑动条的使用
- 进度条示例
- 抽屉效果示例
- 多页面切换效果
- 层叠窗体控件的使用
- 树状显示效果
- 表格控件显示效果
- QTextEdit简单使用
exercise
编程实现一个布局合理美观的员工信息输入界面,要求输入姓名、年龄、性别、学历、入职时间、工作部门、
技术职称以及员工照片。要求综合使用文本框、单选按钮、复选框、标签、列表框和组合框。界面控件定位全部采用人工设定的方式。
编程实现与下面的图示界面类似的界面布局。左侧是一个树形结构,右侧是一个表。单击左侧的不同节点,右侧显示不同的内容。
注意,仅做出示意型的内容即可。
【提示】右侧部分实现方式有两种:
- 每次单击左侧不同节点,表格首先清空,然后添加不同信息
- 建立不同表格放到层叠窗体中,单击左侧不同节点就显示不同表格
编程实现与下面的图示界面类似的界面布局。利用选项卡空间实现不同界面的切换,
其他部分请自行选择合唱的控件创建。
【提示】右侧部分实现方式有两种:
- 将所有控件都作为主窗体的子控件创建,切换选项卡时利用控件的show和hide方法显示不同的控件;
- 建立两个QWidget窗体,再将不同控件作为不同QWidget的子控件创建,单击不同选项卡就显示不同QWidget窗体。
chapter05
demo
exercise
编程实现一个富文本编辑器,其中:
- “文件”菜单包括新建、打开、保存3项,对应工具栏前3个按钮。第一个命令将文件框清空,后两个命令都是打开标准对话框的文件,
这里并不实现打开文件和保存文件的功能。- “编辑”菜单包括剪切、复制、粘贴3项,分别调用QTextEdit类的cut、copy、paste函数进行文本编辑,请参考QTextEdit类的帮助文档。
这3个命令对应工具栏中间3个按钮。- 另外,“编辑”菜单中还包括字体颜色、字体设置两项,分别调用标准的选择颜色对话框、选择字体对话框。利用它们可以设置字体的颜色和其他属性。
这两个命令对应工具栏最后两个按钮。
程序运行结果如下图所示。
chapter06
demo
- QHBoxLayout的使用
- QVBoxLayout的使用
- QGridLayout的基本用法示例
- 用网格布局构造温度转换程序界面
- 用水平布局和垂直布局构造温度转换程序界面
- QSplitter使用示例之一
- QSplitter使用示例之二
- 停靠窗口示例
- 多文档应用示例
exercise
利用各种控件和布局管理器实现类似下图的界面
利用水平分割窗口实现类似下图的界面。左侧是树状结构,右侧是富文本编辑框。中间的分割条可以左右拖动。单击树状结构中不同的叶子结点,显示不同的文本
利用各种控件和布局管理器实现类似下图的界面。
将习题2中的富文本编辑器修改为多文档结构的程序。
chapter07
demo
- 重新实现事件处理函数
- 重新实现event函数
- 为标签对象添加事件过滤器
- 为QApplication对象添加事件过滤器
- 重写QApplication对象的notify函数
- 鼠标事件的使用示例
- 用W、S、A、D 4个按键移动按钮
- QObject类定时器的简单示例
- 液晶时钟
exercise
编程实现下面的功能:利用标签显示一张小图片,当鼠标单击窗口其他位置后,小图片移动到以鼠标单击位置为中心的区域
编程实现下面的功能:利用标签显示一张小图片,利用键盘的上下左右键移动这张图片,并且图片不能移出窗体边界
编程实现下面的功能:一个红色小球(用标签实现)在窗体中以45o或135o角匀速运动,碰到墙壁弹回,如下图所示。