一、需求
弹出的子窗口要顶置在最前面,播放指定的动画,不能有任务栏图标,不能影响鼠标操作窗口背后的其他界面。 (相当于桌面动画效果)
三、子窗口代码
#ifndef FORM_H #define FORM_H #include <QWidget> #include <QStyleOption> #include <QPainter> #include <QMouseEvent> #include <QDebug> #include <QDesktopWidget> #include <QMovie> namespace Ui { class Form; } class Form : public QWidget { Q_OBJECT public: explicit Form(QWidget *parent = nullptr); ~Form(); protected: void paintEvent(QPaintEvent *p1); private: Ui::Form *ui; QMovie *mv; }; #endif // FORM_H
3.2 form.cpp
1.#include "form.h" #include "ui_form.h" Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) { ui->setupUi(this); //放在窗口最前面执行,可以实现全穿透,不响应本窗口的事件 //所有鼠标事件都穿透的方法:直接设置子窗体的属性 //如果不执行该属性设置. 是可以响应本窗口的事件 setAttribute(Qt::WA_TransparentForMouseEvents, true); //隐藏标题栏 setWindowFlags(Qt::FramelessWindowHint);//无边框 //打开的窗口在屏幕中间 QDesktopWidget *widget= QApplication::desktop(); move((widget->width()-this->width())/2,(widget->height()-this->height())/2); //窗口大小 this->resize(320,240); //设置窗口顶置: 一直在最前面. 并且隐藏任务栏的图标 Qt::WindowFlags m_flags = windowFlags(); setWindowFlags(m_flags| Qt::FramelessWindowHint |Qt::WindowStaysOnTopHint|Qt::WindowStaysOnTopHint|Qt::Tool); //设置窗口背景透明 setAttribute(Qt::WA_TranslucentBackground); //播放GIF动画 mv = new QMovie(":/load.gif"); ui->label->setMovie(mv); mv->start();//开始播放 } Form::~Form() { delete ui; } void Form::paintEvent(QPaintEvent *p1) { QPainter p(this); //绘制样式 QStyleOption opt; opt.initFrom(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//绘制样式 //定义画笔 QPen pen; pen.setWidth(10); pen.setColor(QColor("#00B0AE")); pen.setStyle(Qt::SolidLine); //线的样式--实线 p.setPen(pen); pen.setWidth(5); pen.setStyle(Qt::DashDotLine); //线的样式 p.setPen(pen); //创建画刷 // QBrush brush; // brush.setColor(QColor("#00B0AE")); // brush.setStyle(Qt::Dense1Pattern); //矩形框填充的样式 // p.setBrush(brush); p.drawRect(p1->rect()); }