首页 分享 基于 QT 实现一个 Ikun 专属桌面宠物

基于 QT 实现一个 Ikun 专属桌面宠物

来源:萌宠菠菠乐园 时间:2024-12-15 04:52

Step0、实现思路

想到的思路有两种:

1、使用 QT 的状态机模式,参考官网文档,这个模式的解耦最佳

2、使用原生 Wigets,将窗口设置为透明无框,循环播放桌面宠物的状态

本文采用第二种思路,实现一个极简版示例。

Step1、新建 Qt Wigets Application

Step2、设置透明背景与鼠标事件

修改 widget.h 头文件,

#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE

namespace Ui { class Widget; }

QT_END_NAMESPACE

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = nullptr);

~Widget();

protected:

void mousePressEvent(QMouseEvent *event);

void mouseMoveEvent(QMouseEvent *event);

void paintEvent(QPaintEvent *);

protected:

QPoint pos;

private:

Ui::Widget *ui;

};

#endif

修改 widget.cpp,

#include "widget.h"

#include "ui_widget.h"

#include <qpainter.h>

#include <QMouseEvent>

#include <QPaintEvent>

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

this->setWindowFlag(Qt::FramelessWindowHint);

this->setAttribute(Qt::WA_TranslucentBackground);

this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);

}

Widget::~Widget()

{

delete ui;

}

void Widget::mousePressEvent(QMouseEvent* ev)

{

if(ev->button()==Qt::LeftButton)

{

pos=ev->pos();

}

}

void Widget::mouseMoveEvent(QMouseEvent*ev)

{

if(ev->buttons()==Qt::LeftButton)

{

int x,y;

x=ev->pos().x()-pos.x();

y=ev->pos().y()-pos.y();

this->move(this->x()+x,this->y()+y);

}

}

void Widget::paintEvent(QPaintEvent *)

{

QPainter painter(this);

QPixmap pixmap;

pixmap.load("../MyPet/image/pikakun.png");

painter.drawPixmap(0, 0, 128, 128, pixmap);

}

调整窗口大小,

Step3、编译打包

编译运行,

打包部署,

官网 https://gitcode.net/mirrors/probonopd/linuxdeployqt

下载地址 https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage

chmod +x linuxdeployqt-continuous-x86_64.AppImage

sudo mv linuxdeployqt-continuous-x86_64.AppImage linuxdeployqt

sudo mv linuxdeployqt /usr/local/bin

linuxdeployqt --version

vim ~/.bashrc

export PATH=/home/sam/MyWorkspace/qt-everywhere-src-6.0.0/qtbase/bin:$PATH

export LIB_PATH=/home/sam/MyWorkspace/qt-everywhere-src-6.0.0/qtbase/lib:$LIB_PATH

export PLUGIN_PATH=/home/sam/MyWorkspace/qt-everywhere-src-6.0.0/qtbase/plugins:$PLUGIN_PATH

export QML2_PATH=/home/sam/MyWorkspace/qt-everywhere-src-6.0.0/qtbase/qml:$QML2_PATH

source ~/.bashrc

qmake -v

linuxdeployqt MyPet -appimage

Windows 下注意一个坑,要打开 QT 命令行,并且在 windeployqt.exe 的根目录下执行打包,否则会出现依赖打包遗漏的情况,

注意,需要将对应的图片资源放到打包文件夹下,图片资源对应代码中的相对路径/绝对路径,否则在其他相同操作系统的电脑上会找不到图片。

相关知识

用QT实现一个简单的桌面宠物
【QT项目实战】自制桌面宠物!当我学了qt窗口开发之后,就把原神的纳西妲做成了桌面宠物!
基于C#制作一个桌面宠物
基于Qt实现桌面宠物
QT桌面宠物+桌面大鹅(1)
Qt二次元桌面宠物
【C/C++技术教学】Qt自制桌面宠物!思路分析+代码演示丨程序员教你如何把喜欢的角色做成随便把玩的桌面宠物!
用c语言写一个桌面宠物
拓海/基于Qt的桌面宠物
QT 电子宠物项目

网址: 基于 QT 实现一个 Ikun 专属桌面宠物 https://www.mcbbbk.com/newsview740671.html

所属分类:萌宠日常
上一篇: 【electron
下一篇: 用python写一个桌面宠物

推荐分享