当前位置: 首页 > news >正文

Qt-桌面宠物

目录

一,演示(部分功能)

二,开发环境准备

三,部分代码实现

1.创建基础窗口

2.实现宠物动画

3.添加交互功能

4.系统托盘集成

5.行为模式实现

6.状态管理系统

7.资源打包部署

四,接受定制


一,演示(部分功能)

二,开发环境准备

        安装Qt Creator和Qt框架(建议5.14或更新版本) 配置C++编译环境(MSVC/MinGW) 准备素材资源(PNG序列帧/透明背景素材)

三,部分代码实现

1.创建基础窗口
QWidget *petWindow = new QWidget(nullptr, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
petWindow->setAttribute(Qt::WA_TranslucentBackground);
petWindow->setFixedSize(320, 489);

2.实现宠物动画

使用QMovie加载GIF动画或QLabel显示帧序列:

QLabel *petLabel = new QLabel(petWindow);
QMovie *petMovie = new QMovie(":/animations/idle.gif");
petLabel->setMovie(petMovie);
petMovie->start();
3.添加交互功能

实现鼠标拖拽和点击事件:

void PetWidget::mousePressEvent(QMouseEvent *event) {if (event->button() == Qt::LeftButton) {m_dragPosition = event->globalPos() - frameGeometry().topLeft();event->accept();}
}void PetWidget::mouseMoveEvent(QMouseEvent *event) {if (event->buttons() & Qt::LeftButton) {move(event->globalPos() - m_dragPosition);event->accept();}
}
4.系统托盘集成

创建右键菜单和托盘图标:

QSystemTrayIcon *trayIcon = new QSystemTrayIcon(QIcon(":/icon.png"), this);
QMenu *trayMenu = new QMenu();
trayMenu->addAction("退出", qApp, &QCoreApplication::quit);
trayIcon->setContextMenu(trayMenu);
trayIcon->show();
5.行为模式实现

添加随机移动和边缘检测:

void PetWidget::startRandomMovement() {QTimer *moveTimer = new QTimer(this);connect(moveTimer, &QTimer::timeout, [this]() {QPoint newPos = pos() + QPoint(qrand() % 10 - 5, qrand() % 10 - 5);newPos = ensureInScreenBounds(newPos);move(newPos);});moveTimer->start(1000);
}

6.状态管理系统

实现不同行为状态切换:

enum PetState { IDLE, WALK, SLEEP, EAT };
void setPetState(PetState state) {currentState = state;updateAnimation();updateBehavior();
}

7.资源打包部署

使用Qt资源系统(.qrc文件)打包素材 发布时通过windeployqt工具收集依赖项 可考虑使用打包软件制作安装包

四,接受定制

可以定制角色,实现对应功能

http://www.lryc.cn/news/612523.html

相关文章:

  • 4、docker数据卷管理命令 | docker volume
  • docker run 入门到进阶:容器启动背后的门道
  • PCB工艺-四层板制作流程(简单了解下)
  • C++与C语言实现Stack的对比分析
  • 如何快速翻译PPT中的文字(或简繁体转换)
  • PI 思维升级 解密电容器的选择与布局策略,带您追求极致平坦的电源阻抗
  • 【VTK】绘制圆锥进行简单的几何渲染
  • 图论(邻接表)DFS
  • AI领域的三箭齐发之夜 - genie3,gpt-oss, Opus 4.1
  • go与grpc
  • 【软考系统架构设计师备考笔记5】 - 专业英语
  • Xcode 26 如何在创建的 App 包中添加特定的目录
  • Linux——静态网络,创建用户
  • 基于PHP的快递管理系统的设计与实现
  • android10~16变更一览和开发者兼容应对
  • css优化、提升性能方法都有哪些?
  • React:生命周期
  • antd组件select下拉数据分页加载
  • LeetCode 分类刷题:611. 有效三角形的个数
  • 【前端】Vite中import.meta功能详解
  • 深度修改elementUI样式思路
  • 《Day2-PyTorch Tensor 从入门到实践:核心操作与避坑指南》
  • 磁悬浮转子变转速工况下的振动抑制全解析
  • Conditional Modeling Based Automatic Video Summarization
  • 云平台托管集群:EKS、GKE、AKS 深度解析与选型指南-第二章
  • [Python 基础课程]猜数字游戏
  • HIVE 窗口函数处理重复数据
  • 【C/C++】形参、实参相关内容整理
  • GISBox中OSGB数据转3DTiles格式指南
  • 开源流媒体服务器ZLMediaKit 的Java Api实现的Java版ZLMediaKit流媒体服务器-二开视频对话