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

Posted woniukuangben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT在子窗口外单击关闭子窗口相关的知识,希望对你有一定的参考价值。

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

bool eventFilter(QObject *watched, QEvent *event);//过滤器
 void mousePressEvent(QMouseEvent *ev);//鼠标事件

其实最简单有效的方法是设置窗口标志位

setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);
Qt::Popup表明此窗口为最上层模态窗口,点击子窗口之外的位置都会自动隐藏,类似于菜单的效果。需要注意的是,使用move(point)函数来移动子窗口时,需要用全局坐标,虽然它的父对象没有变,但是坐标变成了全局坐标,需使用move(mapToGlobal(point))。

以上是关于QT在子窗口外单击关闭子窗口的主要内容,如果未能解决你的问题,请参考以下文章

2-Qt关闭子窗口时执行特定代码

[QT]MdiArea子窗口的管理,拦截子窗口关闭消息并在父窗口处理

QT在子窗体中控制父窗体

QT中想在子线程中创建对话窗口怎么建

[QT]在子窗口或者控件中绘图

Qt Designer PyQt5 覆盖 CloseEvent 子窗口不起作用