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


目录
相关文章
|
1月前
|
算法 API C++
【Qt UI】QT 窗口/控件置顶方法详解
【Qt UI】QT 窗口/控件置顶方法详解
155 0
|
1月前
|
存储 搜索推荐 人机交互
Qt鼠标事件全面解析:从基础到实战
Qt鼠标事件全面解析:从基础到实战
234 0
|
1月前
Qt 布局管理之 停靠窗口QDockWidget
Qt 布局管理之 停靠窗口QDockWidget
95 0
|
1月前
Qt 布局管理之分割窗口
Qt 布局管理之分割窗口
51 0
|
1月前
Qt3个窗口类的区别
一个普通的窗口,不包含菜单栏、状态栏,除了登录界面,新建项目时建议使用QWidget,因为大部分的窗口可能都要做成无边框窗口,需要自定义标题栏,实现拉伸等;QMainWindow使用的场景不多。:对话框,常用来做登录窗口、弹出窗口(例如设置界面):包含菜单栏、工具栏、状态栏。
42 0
|
7月前
|
存储 编解码 Cloud Native
C++ Qt关于多屏幕窗口处理
C++ Qt关于多屏幕窗口处理
|
7月前
08 QT - Qt窗口坐标体系
08 QT - Qt窗口坐标体系
30 0
|
17天前
Qt窗口的闪烁QWebEngineView
Qt窗口的闪烁QWebEngineView
|
17天前
|
存储
Qt无边框窗口可拖动
Qt无边框窗口可拖动
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结