想到的思路有两种:
1、使用 QT 的状态机模式,参考官网文档,这个模式的解耦最佳
2、使用原生 Wigets,将窗口设置为透明无框,循环播放桌面宠物的状态
本文采用第二种思路,实现一个极简版示例。
修改 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);
}
调整窗口大小,
编译运行,
打包部署,
官网 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://m.mcbbbk.com/newsview740671.html
上一篇: 【electron |
下一篇: 用python写一个桌面宠物 |