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

举报
DS小龙哥 发表于 2021/12/10 00:53:46 2021/12/10
【摘要】 一、需求  弹出的子窗口要顶置在最前面,播放指定的动画,不能有任务栏图标,不能影响鼠标操作窗口背后的其他界面。 (相当于桌面动画效果) 二、效果示例   三、子窗口代码 3.1 form.h #ifndef FORM_H#define FORM_H #include <QWidget>...

一、需求

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

二、效果示例

 

三、子窗口代码

3.1 form.h


  
  1. #ifndef FORM_H
  2. #define FORM_H
  3. #include <QWidget>
  4. #include <QStyleOption>
  5. #include <QPainter>
  6. #include <QMouseEvent>
  7. #include <QDebug>
  8. #include <QDesktopWidget>
  9. #include <QMovie>
  10. namespace Ui {
  11. class Form;
  12. }
  13. class Form : public QWidget
  14. {
  15. Q_OBJECT
  16. public:
  17. explicit Form(QWidget *parent = nullptr);
  18. ~Form();
  19. protected:
  20. void paintEvent(QPaintEvent *p1);
  21. private:
  22. Ui::Form *ui;
  23. QMovie *mv;
  24. };
  25. #endif // FORM_H

3.2 form.cpp


  
  1. #include "form.h"
  2. #include "ui_form.h"
  3. Form::Form(QWidget *parent) :
  4. QWidget(parent),
  5. ui(new Ui::Form)
  6. {
  7. ui->setupUi(this);
  8. //放在窗口最前面执行,可以实现全穿透,不响应本窗口的事件
  9. //所有鼠标事件都穿透的方法:直接设置子窗体的属性
  10. //如果不执行该属性设置. 是可以响应本窗口的事件
  11. setAttribute(Qt::WA_TransparentForMouseEvents, true);
  12. //隐藏标题栏
  13. setWindowFlags(Qt::FramelessWindowHint);//无边框
  14. //打开的窗口在屏幕中间
  15. QDesktopWidget *widget= QApplication::desktop();
  16. move((widget->width()-this->width())/2,(widget->height()-this->height())/2);
  17. //窗口大小
  18. this->resize(320,240);
  19. //设置窗口顶置: 一直在最前面. 并且隐藏任务栏的图标
  20. Qt::WindowFlags m_flags = windowFlags();
  21. setWindowFlags(m_flags| Qt::FramelessWindowHint |Qt::WindowStaysOnTopHint|Qt::WindowStaysOnTopHint|Qt::Tool);
  22. //设置窗口背景透明
  23. setAttribute(Qt::WA_TranslucentBackground);
  24. //播放GIF动画
  25. mv = new QMovie(":/load.gif");
  26. ui->label->setMovie(mv);
  27. mv->start();//开始播放
  28. }
  29. Form::~Form()
  30. {
  31. delete ui;
  32. }
  33. void Form::paintEvent(QPaintEvent *p1)
  34. {
  35. QPainter p(this);
  36. //绘制样式
  37. QStyleOption opt;
  38. opt.initFrom(this);
  39. style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//绘制样式
  40. //定义画笔
  41. QPen pen;
  42. pen.setWidth(10);
  43. pen.setColor(QColor("#00B0AE"));
  44. pen.setStyle(Qt::SolidLine); //线的样式--实线
  45. p.setPen(pen);
  46. pen.setWidth(5);
  47. pen.setStyle(Qt::DashDotLine); //线的样式
  48. p.setPen(pen);
  49. //创建画刷
  50. // QBrush brush;
  51. // brush.setColor(QColor("#00B0AE"));
  52. // brush.setStyle(Qt::Dense1Pattern); //矩形框填充的样式
  53. // p.setBrush(brush);
  54. p.drawRect(p1->rect());
  55. }

文章来源: xiaolong.blog.csdn.net,作者:DS小龙哥,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaolong.blog.csdn.net/article/details/119726240

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。