文章目录
桌面会飞的鸟Qt C++小项目
整体流程
具体代码展开
1.鸟图片的帧动画切换
- 先加载图片资源
- 通过for循环 预先加载图片资源
- 创建定时器,当定时器在发送流逝的信号的时候,将图片资源进行切换(实现效果上的飞的功能),如果min下标大于max则需要重置min为1。此时只是在鸟类中进行了图片的切换。
- 但是我们最终需要在主界面上进行展示,因此需要鸟类进行信号发出,表示鸟类已经完成图片切,主界面可以进行图片的加载了,该信号定义为changePix信号,当主界面接收到changePix信号的时候,进行图片的更新操作(主界面绘制鸟类图片是通过重写paintEvent方法进行的,在接收到changePix的时候可以通过调用update进行重新绘制,因为此时鸟类中的m_Bird_Pix属性已经改变)。
重点理解: 图片的切换操作
- 鸟类种的定时器 每发出timeout信号,就会按序列切换图片 并发送changePix信号(目的是为了让主界面知道鸟类图片已经切换,从而在主界面进行重新绘制鸟类的图片)
2.鸟实现自动水平飞的功能
- 在主界面上定义一个m_Auto_Position记录位置
- 定义一个QTimer类型的timer定时器,当定时器流逝的时候就会使得m_Auto_Position自增5,最后将m_Auto_Position赋值给move操作即可实现移动的效果
- 移动的小细节处理 1.如果m_Auto_Position大于了桌面的宽度应该让鸟返回到屏幕的最左侧;2.如果鼠标按在了小鸟上,小鸟不应该移动(这里需要在小鸟中定义一个变量mouseDown记录鼠标是否被点击,如果没有被点击就m_Auto_Position自增) ,mouseDown在重写鼠标点击 释放等函数中进行维护
3 鼠标拖着鸟的操作
- 鼠标按下的时候记录分量的值(m_pos)
- 鼠标移动的时候反向求出位置,并发送信号出去,方便主窗口进行接受处理鸟类的移动位置多少
- 鼠标释放的时候记录鼠标状态mouseDown为false
4.实现右键点击鸟类出现菜单栏
5.使界面透明化和无标题模式
//去掉标题栏 this->setWindowFlags(Qt::FramelessWindowHint); //设置透明窗口 120号属性 this->setAttribute(Qt::WA_TranslucentBackground); //设置窗口顶层 this->setWindowFlags(this->windowFlags() |Qt::Tool);
项目打包
- 找到项目的realse版本的文件夹,并进入realse版本,将exe文件放置在新的文件下下面
- 找到Qt 命令面板(需要对应相同的编译器我用的32位的),并输入具体代码:1.切换盘符;2.切换到exe文件目录下面;3.输入 windeploy.exe exe名称.exe
打包给用户阶段,参考
总结
本博客可能对于新手来说解释的有些不够到位,但总体的思路大致即分为以下几点:
- 实现鸟图片的加载,以实现帧动画
- 实现鸟类的自动移动(QTimer时间控制)
- 鼠标实现鸟类的位置拖动
- 实现右键鼠标弹出菜单
- 实现窗体的透明化和无标题栏
仔细分析其实并不难,如果非要说难得话可能是对于鼠标事件重写中向量那一块有些难(可以百度一下,这里我不多说)。读者可以去我博客去下载相应得代码更具我上面叙述得进行代码得运行和代码得自行解读,如有如何不理解得地方欢迎评论区留言。(代码中存在得bug为点击了小鸟之后会出现小鸟不能自动移动得问题,如果遇到这个问题需读者自行思考如何修改,项目仓促笔者未进行修改排查)
自取代码链接
如积分不够可以私聊我发你