桌面会飞的鸟Qt C++小项目

本文详细介绍了使用Qt C++开发的一个桌面小鸟项目,涉及图片帧动画切换、鸟类自动水平移动、鼠标拖拽控制、右键菜单功能以及透明界面设计。通过实例代码演示了如何实现小鸟动画、位置控制和用户交互,适合初学者理解Qt编程实践。
摘要由CSDN通过智能技术生成

桌面会飞的鸟Qt C++小项目

整体流程

在这里插入图片描述

具体代码展开

1.鸟图片的帧动画切换

  1. 先加载图片资源
  2. 通过for循环 预先加载图片资源
  3. 创建定时器,当定时器在发送流逝的信号的时候,将图片资源进行切换(实现效果上的飞的功能),如果min下标大于max则需要重置min为1。此时只是在鸟类中进行了图片的切换。
  4. 但是我们最终需要在主界面上进行展示,因此需要鸟类进行信号发出,表示鸟类已经完成图片切,主界面可以进行图片的加载了,该信号定义为changePix信号,当主界面接收到changePix信号的时候,进行图片的更新操作(主界面绘制鸟类图片是通过重写paintEvent方法进行的,在接收到changePix的时候可以通过调用update进行重新绘制,因为此时鸟类中的m_Bird_Pix属性已经改变)。

image-20220908101322913
image-20220908101254584
image-20220908101346363

image-20220908101503299
image-20220908101614951

重点理解: 图片的切换操作

  1. 鸟类种的定时器 每发出timeout信号,就会按序列切换图片 并发送changePix信号(目的是为了让主界面知道鸟类图片已经切换,从而在主界面进行重新绘制鸟类的图片)

2.鸟实现自动水平飞的功能

  1. 在主界面上定义一个m_Auto_Position记录位置
  2. 定义一个QTimer类型的timer定时器,当定时器流逝的时候就会使得m_Auto_Position自增5,最后将m_Auto_Position赋值给move操作即可实现移动的效果
  3. 移动的小细节处理 1.如果m_Auto_Position大于了桌面的宽度应该让鸟返回到屏幕的最左侧;2.如果鼠标按在了小鸟上,小鸟不应该移动(这里需要在小鸟中定义一个变量mouseDown记录鼠标是否被点击,如果没有被点击就m_Auto_Position自增) ,mouseDown在重写鼠标点击 释放等函数中进行维护

image-20220908102324575

image-20220912222729392

3 鼠标拖着鸟的操作

  1. 鼠标按下的时候记录分量的值(m_pos)
  2. 鼠标移动的时候反向求出位置,并发送信号出去,方便主窗口进行接受处理鸟类的移动位置多少
  3. 鼠标释放的时候记录鼠标状态mouseDown为false
    image-20220908103631090

image-20220908103819125

image-20220908103915007

4.实现右键点击鸟类出现菜单栏

image-20220912223940925

image-20220912224010297

5.使界面透明化和无标题模式

//去掉标题栏
 this->setWindowFlags(Qt::FramelessWindowHint);
 //设置透明窗口 120号属性
 this->setAttribute(Qt::WA_TranslucentBackground);
 //设置窗口顶层
 this->setWindowFlags(this->windowFlags() |Qt::Tool);

image-20220908104111390

项目打包

  1. 找到项目的realse版本的文件夹,并进入realse版本,将exe文件放置在新的文件下下面
  2. 找到Qt 命令面板(需要对应相同的编译器我用的32位的),并输入具体代码:1.切换盘符;2.切换到exe文件目录下面;3.输入 windeploy.exe exe名称.exe

image-20220908105424290

image-20220908105439499

image-20220908105510623

image-20220908105553516

image-20220908105335604

打包给用户阶段,参考

QT项目打包全套—保姆级教程

总结

本博客可能对于新手来说解释的有些不够到位,但总体的思路大致即分为以下几点:

  1. 实现鸟图片的加载,以实现帧动画
  2. 实现鸟类的自动移动(QTimer时间控制)
  3. 鼠标实现鸟类的位置拖动
  4. 实现右键鼠标弹出菜单
  5. 实现窗体的透明化和无标题栏

仔细分析其实并不难,如果非要说难得话可能是对于鼠标事件重写中向量那一块有些难(可以百度一下,这里我不多说)。读者可以去我博客去下载相应得代码更具我上面叙述得进行代码得运行和代码得自行解读,如有如何不理解得地方欢迎评论区留言。(代码中存在得bug为点击了小鸟之后会出现小鸟不能自动移动得问题,如果遇到这个问题需读者自行思考如何修改,项目仓促笔者未进行修改排查)

自取代码链接

如积分不够可以私聊我发你

代码资源

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

William_Tao(攻城狮)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值