广州市品牌网站建设公司,用vs做html网站,锦绣大地seo,黄岛网站制作Step0、实现思路
想到的思路有两种#xff1a;
1、使用 QT 的状态机模式#xff0c;参考官网文档#xff0c;这个模式的解耦最佳
2、使用原生 Wigets#xff0c;将窗口设置为透明无框#xff0c;循环播放桌面宠物的状态
本文采用第二种思路#xff0c;实现一个极简版…Step0、实现思路
想到的思路有两种
1、使用 QT 的状态机模式参考官网文档这个模式的解耦最佳
2、使用原生 Wigets将窗口设置为透明无框循环播放桌面宠物的状态
本文采用第二种思路实现一个极简版示例。
Step1、新建 Qt Wigets Application Step2、设置透明背景与鼠标事件
修改 widget.h 头文件
#ifndef WIDGET_H
#define WIDGET_H#include QWidgetQT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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_H修改 widget.cpp
#include widget.h
#include ui_widget.h
#include qpainter.h
#include QMouseEvent
#include QPaintEventWidget::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){posev-pos();}
}void Widget::mouseMoveEvent(QMouseEvent*ev)
{if(ev-buttons()Qt::LeftButton){int x,y;xev-pos().x()-pos.x();yev-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、编译打包
编译运行 打包部署
# linux操作系统下的QT打包部署工具
官网 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# 配置系统变量
# 例如QT 安装地址为 /home/sam/MyWorkspace/qt-everywhere-src-6.0.0/qtbase/bin/qmake# 修改文件 ~/.bashrc
vim ~/.bashrc
# add qt env
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 是否生效
qmake -v# QT 打包发布 Release 版本的可执行文件 MyPet# MyPet 直接运行是报错的需要 linuxdeployqt 打包依赖
linuxdeployqt MyPet -appimage# Windows 自带 windeployqt.exe Windows 下注意一个坑要打开 QT 命令行并且在 windeployqt.exe 的根目录下执行打包否则会出现依赖打包遗漏的情况 注意需要将对应的图片资源放到打包文件夹下图片资源对应代码中的相对路径/绝对路径否则在其他相同操作系统的电脑上会找不到图片。