当前位置: 首页 > 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.xdnf.cn/news/1253377.html

相关文章:

  • win10/11网络防火墙阻止网络连接?【图文详解】防火墙阻止连接网络的解决方法
  • Unity 调节 Rigidbody2D 响应速度的解决方案【资料】
  • GPT-OSS-20B vs Qwen3-14B 全面对比测试
  • AI领域的三箭齐发之夜 - genie3,gpt-oss, Opus 4.1
  • K8S的POD数量限制
  • harbor仓库搭建(配置https)
  • 数据结构(4)
  • 时间轮算法
  • 【算法训练营Day21】回溯算法part3
  • vue3 el-dialog自定义实现拖拽、限制视口范围增加了拖拽位置持久化的功能
  • DNS 服务器
  • 【golang】基于redis zset实现并行流量控制(计数锁)
  • 部署Web UI自动化测试平台:SeleniumFlaskTester
  • Maven入门到精通
  • Rust进阶-part5-trait
  • 机器学习——朴素贝叶斯
  • 19day-人工智能-机器学习-分类算法-决策树
  • NCD57080CDR2G 安森美onsemi 通用驱动器, SOIC, 8针, 20V电源, 8 A输出NCD57080CDR2电流隔离式栅极驱动器
  • 大模型后训练——Online-RL基础
  • 【嵌入式电机控制#26】BLDC:三相模拟采集
  • 江协科技STM32 15-1 FLASH闪存
  • LinkedList 深度解析:核心原理与实践
  • Docker 常用命令介绍
  • Linux 中 Git 操作大全
  • Web 端 AI 图像生成技术的应用与创新:虚拟背景与创意图像合成
  • 初识神经网络01——认识PyTorch
  • docker-compose快速部署启动file beat+ELK
  • WMS及UI渲染底层原理学习
  • 完整的登陆学生管理系统(配置数据库)
  • 数字图像处理(冈萨雷斯)第三版:第四章——空间滤波与频域滤波(平滑与锐化)——主要内容和重点