QT软件开发: 窗口鼠标事件穿透

简介: QT软件开发: 窗口鼠标事件穿透

一、需求

弹出的子窗口要顶置在最前面,播放指定的动画,不能有任务栏图标,不能影响鼠标操作窗口背后的其他界面。 (相当于桌面动画效果)

二、效果示例

image.png

三、子窗口代码

3.1 form.h

#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());
}


目录
相关文章
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
516 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
3月前
|
C++ Windows
Qt 窗口置顶
Qt 窗口置顶
101 1
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
627 4
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
214 3
|
3月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
69 3
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
471 3
|
3月前
【qt】视口和窗口坐标
【qt】视口和窗口坐标
27 0
|
3月前
|
算法 数据安全/隐私保护
【qt】启动窗口的玩法
【qt】启动窗口的玩法
28 0
|
3月前
【qt】多窗口开发
【qt】多窗口开发
53 0