QT在子窗口外单击关闭子窗口

 

1.添加过滤器(eventFilter),

bool eventFilter(QObject *watched, QEvent *event);//过滤器

2.重写鼠标单击事件,这两种方法都要判断鼠标单击位置是不是在子窗口上。而且在可编辑控件上如(下拉框、文本编辑框等),父窗口会直接传递到可编辑控件上,过滤器和重写的鼠标事件无法获取单击事件。

void mousePressEvent(QMouseEvent *ev);//鼠标事件


3.其实最简单有效的方法是设置窗口标志位
setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);

Qt::Popup表明此窗口为最上层模态窗口,点击子窗口之外的位置都会自动隐藏,类似于菜单的效果。

需要注意的是,使用move(point)函数来移动子窗口时,需要用全局坐标,虽然它的父对象没有变,但是坐标变成了全局坐标,需使用move(mapToGlobal(point))。
posted @   cicero  阅读(1614)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2018-11-23 Qt 网格布局
2017-11-23 centos7安装MySQL
点击右上角即可分享
微信分享提示