QT软件开发: 窗口鼠标事件穿透
【摘要】
一、需求
弹出的子窗口要顶置在最前面,播放指定的动画,不能有任务栏图标,不能影响鼠标操作窗口背后的其他界面。 (相当于桌面动画效果)
二、效果示例
三、子窗口代码
3.1 form.h
#ifndef FORM_H#define FORM_H #include <QWidget>...
一、需求
弹出的子窗口要顶置在最前面,播放指定的动画,不能有任务栏图标,不能影响鼠标操作窗口背后的其他界面。 (相当于桌面动画效果)
二、效果示例
三、子窗口代码
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
-
#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());
-
}
-
文章来源: xiaolong.blog.csdn.net,作者:DS小龙哥,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaolong.blog.csdn.net/article/details/119726240
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)