# QT **Repository Path**: baohailing/qt ## Basic Information - **Project Name**: QT - **Description**: QT哔哩哔哩学习跟学敲得代码https://www.bilibili.com/video/BV1g4411H78N/?p=11&vd_source=ebb476181fc8b68c608aabed277f3b37 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-04-23 - **Last Updated**: 2023-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QT QT哔哩哔哩学习跟学敲得代码https://www.bilibili.com/video/BV1g4411H78N/?p=11&vd_source=ebb476181fc8b68c608aabed277f3b37 学习过程如下 第一天: 1 了解QT的简介历史优点版本安装方法成功案例。 2 学会了创建第一个QT程序,并了解了命名规则,main.cpp相应代码段的含义,默认创建窗口类,基类有三种QWidget,QMainWindow,QDialog。 3 学习了文件 类 函数 变量的命名规范和常用的快捷键。 4 学习了QPushButton的创建,学会创建按钮,设置按钮的大小,位置,命名。 5 学习了对象树 如何创建自己的类 继承关系。 6 学习了信号和槽。了解了connect连接的四个参数分别为发送者,发送的信号,触发的事件,处理的槽函数。做了老师饿了学生请客吃饭例子,创建的老师对象是信号的发送者,hungry()函数是发送的信号,学生对象是接受者,treat()函数是处理的槽函数,最终输出我请你吃饭。下课后classOver()为触发函数,在widget.cpp中定义,并调用。 第二天: 1 学习完第一部分内容。学习完了信号和槽的知识点,自定义的信号和槽发生重载的解决,学习了Lambda表达式在信号和槽中的应用。对第一部分内容进行总结回顾。 2 开启第二部分内容,学习了QMainWimdow菜单栏,工具栏,状态栏,眸接部件等的创建方方法;学习了添加资源文件,在小部件前面添加图标等知识点。 第三天: 1 学习完了第二部分内容。学习了模态和非模态对话框的创建方式和区别;学习了消息对话框QMessageBox, critical,informatiin,warning,question的设置和包含的参数类型,学习了颜色对话框QColorDialog,文件对话框QFileDialog,字体对话框QFontDialog。 2 学习了QT设计,了解了设计界面常用的控件的基本使用方法。 3 开启第三部分学习。学习了自定义控件的封装。4 安装git。 第四天: 1 学习了Qt中的鼠标事件,最常用的有移入,移出,点击,释放,移动等。 2 学习了定时器的两种创建方式,并令定时器根据不同的时间间隔读数,连接信号槽函数令定时器暂停等。 3 学习了事件分发器和事件过滤器。主要用来向下分发事件和阻断事件。 4 学习了QPainter绘图,学习了画矩形,圆形,画线,画图片,画文字,和设置绘图对象,绘图颜色,绘图大小,笔的颜色,样式,填充样式等。学习了对画家进行移动,利用所学知识移动绘画作品。 5 学习了git常用基本命令行。 第五天: 1 完成了第三部分学习内容。学习了QPixmap,QImage,QPicture绘图设备,QPixmap对不同平台做了显示优化,QImage可以对像素进行访问以修改像素点,QPicture可以记录和重现绘图指令,绘图后缀.zt。 2 学习了QFile文件读写操作和QFilenfo文件信息读取。用append追加,文件信息中,后缀名info.suffix()也很重要,可以根据后缀名判断打开的文件类型。 3 开启第四部分学习内容~翻硬币案例。在百度网盘下载了可能用到的案例素材,将素材设置为资源文件,供案例使用。学习了设置游戏主场景图片,和游戏开始按钮的动画特效和击发的事件。 4 学习完git基本命令可以非常容易的找到相对路径和绝对路径,就可以很容易的理解把QPixmap绘画保存在自己电脑上的操作了。 第六天 1 继续翻金币案例,完善了MainScene界面。开始按钮要展现出弹跳动画效果,并且点击后延迟0.5秒时间待动画完成后关闭MainScene窗口,进入ChooseLevelScene界面。 2 完成了选择关卡界面。设置选择关卡的窗口特征和菜单栏,与 MainScene窗口同, 不同之处选择关卡界面有back按钮,该按钮要实现点击按钮切换按钮上的图片效果,重写了鼠标点击和释放事件,这里特别创建MyPushButton类,重写构造函数MyPushButton。画背景图片用到了QPaintEvent事件,重复率高,基本每个界面都差不多相同。应用for循环设置20个关卡按钮,应用QLabel设置关卡上的文字,但是这个QLabel会把按钮覆盖,导致按钮的功能被屏蔽掉。因此用鼠标事件穿透对label标签设置如下语句即可。label->setAttribute(Qt::WA_TransparentForMouseEvents,true); 3进一步完成游戏界面。创建PlayScene界面,返回按钮和背景设置, 菜单栏与前面的一致,稍加修改即可。这里不同的是要显示第几关level i 字样,应用到了QLabel,并且设置了字体等样式。 4 由于点击返回按钮可以返回上一个界面,这里应用到了信号和槽函数,在.h文件中的signal下书写信号,信号只需要声明不需要定义。在.cpp文件中用emit  this->[槽函数];触发用connect链接信号和槽,再用lambda表达式,书写想要达到的效果,如本案例中实现关闭本窗口打开上一个窗口。这里需要特别注意要找寻到发射信号的信号源,本例子中是对应的实例化对象。 5 预计明天完成哔哩哔哩上QT的全部学习内容。 第七天: 1 继续完成翻金币案例。创建MyCoin类,重写构造函数,让参数传递的是图片地址,方便后续游戏时金币状态的改变。添加现有文件,从百度网盘下载的现有文件.h和.cpp文件,里面包含了金币对应的二维数组的数值,也就是对应的关卡的各个位置金币的正反面初始化位置。 2 在金币类中设置二位数组记录对应关卡的金币图案,社会flag变量记录金币正反面,设置posX和posY记录金币所在位置。设置changeFlag()函数执行翻转效果,设置两个定时器,一个完成从正面翻到背面,一个完成从背面翻到正面。当用户点击金币时,金币翻转,且flag值改变,对应数组值也改变。并且在一个金币进行翻转时,未完成之前不允许其他金币同时翻转,禁用按钮,用一个bool变量记录。重写鼠标按压按钮,用此bool值进行判断翻转是否结束,结束了可以按压,不结束按压无效。 3 设置金币按钮数组,用来让被点击的按钮对应的上下左右均翻转。 4 判断是否胜利。设置变量isWin记录是否胜利,默认为true,for循环检查是否数组内所有硬币都被翻转成功,有一个未成功就算失败。否则胜利,胜利时用QLabel组件加载一个胜利图片,如果胜利加载一个动画特效令胜利的图片从天而降。 5 当游戏胜利时对金币进行翻转无效,此时在鼠标按压函数中加上判断条件如果当游戏已经胜利也不允许对金币进行翻转,禁用所有按钮,即胜利后不可以点击任何的金币。 6 用QSound添加音效,包含开始音效,返回音效,翻金币音效和胜利音效。 7 优化项目,让每个界面的位置固定,不乱跑。 8 将最近学习的内容汇总,保存的我的百度网盘中,以便日后查看。 至此,QT翻金币案例全部完成,QT从入门到实践学习任务完成。明天开始Ubuntu和Linux使用教程学习。