用QT实现一个简单的桌面宠物

news/2024/11/25 7:44:47/

有时候桌面空空的,或者屏幕空旷了,我们就可以找一点东西来点缀一下,那么桌面宠物是一个不错的选择。
作为一个程序猿,如何实现一个桌面宠物呢?
本文就给大家带来的是如何用qt提供一种思路并写一个简单的桌面宠物。

思路

桌面宠物的动画本质上就是图片的展示

利用qt将自身边框设置为隐藏,并将背景设置为透明。

此时,只需要加入一个控件,然后将其背景改成一个图片。

此时,就做好了最基本的桌面宠物。

如何让它动起来呢?

动画的本质还是图片嘛,我们可以设置一个定时器,然后去切换背景图片,实现动画的手段。

这就是一个基本的,单动画的桌面宠物(想要多动画、随机动作等效果的话,只是更多的资源动画罢了,想要反馈的话,只是触发事件罢了,原理相同)

做法

以 《原神》中的妮露为模型,花神之舞为动画,作为本文的例子。

(当然你可以使用其他的模型和动画。)

对于妮露的模型,本文引用了 https://www.aplaybox.com/details/model/xuBcQCqsVWfC

对于妮露的动作,本文引用了 https://www.aplaybox.com/details/motion/NCjsanWFYLQl

由于要将模型和动画渲染到一起

我选择的方式是先渲染为视频,软件采用的MikuMikuDance(俗称mmd),然后利用ffmpeg将其转换为图片

渲染视频

打开 MikuMikuDance

界面如图所示

在这里插入图片描述

然后要加载我们的模型

在这里插入图片描述

在这里插入图片描述

然后选择你要加载的动作

在这里插入图片描述

在这里插入图片描述

由于现在还存在网格线、以及影子

我们并不像要,所以要将其关掉

在这里插入图片描述

之后在file选项卡下面,选择 render avi to file 选项,导出视频

在这里插入图片描述

处理为图片

现在,我们要将其处理为图片

这里需要用到ffmpeg,当然,用其他的也可以。只要可以分割图片即可

请到下列位置下载

https://ffmpeg.org/download.html

同时自己配置环境变量

然后将其转为图片

ffmpeg -i .\2.avi -t 5 -s 640x360 -r 30 ./2/%d.png

在这里插入图片描述

现在,就得到了除了好的每一帧的图片

下面开始代码环节

代码

将上述资源导入到qrc中

将窗体设置为边框隐藏、置顶

将背景设置为透明背景

边框隐藏

    setWindowFlag(Qt::FramelessWindowHint);

置顶

    setWindowFlags (windowFlags () | Qt::WindowStaysOnTopHint);

隐藏

    setAttribute(Qt::WA_TranslucentBackground);

欸,窗口为什么不能移动了!

因为你把边框取消了,鼠标拖动里面是没有对于事件的,所以,要设置一下鼠标拖动的事件

void Widget::mousePressEvent(QMouseEvent *event)
{diff_ = event->globalPos() - this->pos();
}void Widget::mouseReleaseEvent(QMouseEvent *event)
{diff_ = QPoint();
}void Widget::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - this->diff_);
}

好,现在就可以渲染我们的图片了

这里我偷了一个懒,直接使用了label来当背景板,其实应该自己再绘制一个控件的

因为label的功能支持并不是那么的多。

然后我们利用定时器去循环播放图片即可

    setWindowFlag(Qt::FramelessWindowHint);setWindowFlags (windowFlags () | Qt::WindowStaysOnTopHint);setAttribute(Qt::WA_TranslucentBackground);setMouseTracking(true);setMinimumSize(1400, 1400);auto hlayout = new QHBoxLayout(this);auto l = new QLabel();hlayout->addWidget(l);this->idx = 1;l->setStyleSheet(QString("background: url(:/static/nilu/%1.png) no-repeat;").arg(this->idx));auto time = new QTimer(this);time->setInterval(50);connect(time, &QTimer::timeout, this, [this, l]() {this->idx = (this->idx + 1 ) % 2971 + 1;l->setStyleSheet(QString("background: url(:/static/nilu/%1.png) no-repeat;").arg(this->idx));});time->start();

然后,编译运行,就可以得到我们的“小宠物”了。

当然,也可以是老婆(

tips 文件太大qrc不太好放怎么办?

可以将qrc转成rcc二进制文件,然后放入编译文件夹的目录下。

然后使用 QResource::registerResource("./static.rcc"); 这样的方式来动态加载。

最后

最后的样子么,如图所示

在这里插入图片描述

当然了,你还可以写一下多个动作随机切换、待机动作、互动功能

然后,你自己的小宠物(老婆)就出来了。

[amjieker]


http://www.ppmy.cn/news/551406.html

相关文章

桌面小宠物项目开发_C# 桌面宠物 示例源码(透明窗体)

【实例简介】 可以按时叫你吃饭可以控制在桌面上行走等等等等。。。。。。。。。。。。 【实例截图】 【核心代码】 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Syste…

java 创建桌面宠物

QQ宠物终于因为玩家稀少而挂掉了, 但是想一想还有点怀念(其实早就弃了) 再加上追了近三年, 数码宝贝tri 也算就此完结了, 再一次勾起了童年, 以及.....我为毛不能自己养数码宝贝呢(手动滑稽) 由于大学狗(天天在宿舍打游戏的那种)一枚, 所以本宅也就只会一点java Swing ,也就只…

使用unity实现桌面宠物

使用unity做出来的安装程序都是有边框以及背景的,而且要想点击其他窗口就不得不切换窗口,然后最近因为突发奇想,想要个桌面宠物来解解闷,便上网搜了些文章 https://blog.csdn.net/q493201681/article/details/65936592 再结合自…

基于C#制作一个桌面宠物

此文主要基于C#制作一个桌面宠物,可自定义宠物素材图片及打开外部exe的快捷菜单。 实现流程1.1、创建项目1.2、准备素材1.3、控件设置(1)PictureBox控件(2)timer控件(3)contextMenuStrip控件1.4、生成为exe程序1.5、设置开机自启代码块实现流程 1.1、创建项目 打开Visu…

一款非常萌的桌面工具---bongo cat mver0.1.6 附使用教程

bongo cat mver是一款画风非常萌的桌面工具,由B站用户原创制作,具有人性化UI设置界面,可用于装饰视频或直播,能够根据鼠标、键盘操作做出相应的动作,超级可爱。该软件是以小猫的形式展现,共有四种模式供用户…

桌面宠物 ① 通过python制作属于自己的桌面宠物

一、桌面宠物素材 1.1 需要准备什么素材 桌面宠物的各种动画效果,可以看作是由一个个GIF动图拼接而成,我们需要准备多组GIF动图来实现桌面宠物的动作切换。 最好选取是白底的GIF动图。 1.2 介绍几种获得GIF动图的方式 1.2.1 通过pr实现视频转GIF ​ p…

剑指 Offer 68 - II. 二叉树的最近公共祖先 / LeetCode 236. 二叉树的最近公共祖先(搜索与回溯)

题目: 链接:剑指 Offer 68 - II. 二叉树的最近公共祖先;LeetCode 236. 二叉树的最近公共祖先 难度:中等 上一题博客:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 / LeetCode 235. 二叉搜索树的最近公共祖先&#xf…

个人向非企业,基于目前主流图床的选购指南

1. 为什么需要搭建自己的图床 最近研究了一下国内外比较主流的图床与对象存储,因为个人写作更加偏向于使用Markdown,而国内很多平台如掘金,简书,csdn等等网站都做了相关的防盗链,即使是我为作者本人,想取用…