代码地址

https://github.com/duganlx/QT

说明

以下答案并非来自官方,而是本人自己实现的,若有啥问题,欢迎讨论(^-^)
所基于的书籍为《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

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

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

exercise

编程实现一个布局合理美观的员工信息输入界面,要求输入姓名、年龄、性别、学历、入职时间、工作部门、
技术职称以及员工照片。要求综合使用文本框、单选按钮、复选框、标签、列表框和组合框。界面控件定位全部采用人工设定的方式。

编程实现与下面的图示界面类似的界面布局。左侧是一个树形结构,右侧是一个表。单击左侧的不同节点,右侧显示不同的内容。
注意,仅做出示意型的内容即可。
【提示】右侧部分实现方式有两种:

  • 每次单击左侧不同节点,表格首先清空,然后添加不同信息
  • 建立不同表格放到层叠窗体中,单击左侧不同节点就显示不同表格

编程实现与下面的图示界面类似的界面布局。利用选项卡空间实现不同界面的切换,
其他部分请自行选择合唱的控件创建。
【提示】右侧部分实现方式有两种:

  • 将所有控件都作为主窗体的子控件创建,切换选项卡时利用控件的show和hide方法显示不同的控件;
  • 建立两个QWidget窗体,再将不同控件作为不同QWidget的子控件创建,单击不同选项卡就显示不同QWidget窗体。


chapter05

demo

exercise

编程实现一个富文本编辑器,其中:

  • “文件”菜单包括新建、打开、保存3项,对应工具栏前3个按钮。第一个命令将文件框清空,后两个命令都是打开标准对话框的文件,
    这里并不实现打开文件和保存文件的功能。
  • “编辑”菜单包括剪切、复制、粘贴3项,分别调用QTextEdit类的cut、copy、paste函数进行文本编辑,请参考QTextEdit类的帮助文档。
    这3个命令对应工具栏中间3个按钮。
  • 另外,“编辑”菜单中还包括字体颜色、字体设置两项,分别调用标准的选择颜色对话框、选择字体对话框。利用它们可以设置字体的颜色和其他属性。
    这两个命令对应工具栏最后两个按钮。
    程序运行结果如下图所示。

chapter06

demo

exercise

利用各种控件和布局管理器实现类似下图的界面

利用水平分割窗口实现类似下图的界面。左侧是树状结构,右侧是富文本编辑框。中间的分割条可以左右拖动。单击树状结构中不同的叶子结点,显示不同的文本

利用各种控件和布局管理器实现类似下图的界面。

将习题2中的富文本编辑器修改为多文档结构的程序。

chapter07

demo

exercise

编程实现下面的功能:利用标签显示一张小图片,当鼠标单击窗口其他位置后,小图片移动到以鼠标单击位置为中心的区域

编程实现下面的功能:利用标签显示一张小图片,利用键盘的上下左右键移动这张图片,并且图片不能移出窗体边界

编程实现下面的功能:一个红色小球(用标签实现)在窗体中以45o或135o角匀速运动,碰到墙壁弹回,如下图所示。