Qt cpp 如果 m_pDispWidget 窗口被其他任何窗口遮盖,则 无父窗口的顶级窗口m_pARAugmentedRealityOneSenceCover隐藏
时间: 2023-07-19 22:03:51 浏览: 98
FadeWidget_窗口隐藏渐变_carevdd_QT_
可以通过监听窗口激活事件来实现这个功能。当其他窗口激活时,判断是否遮盖了m_pDispWidget窗口,如果是,则隐藏m_pARAugmentedRealityOneSenceCover窗口。
具体实现方法如下:
1. 在m_pDispWidget的构造函数中,使用installEventFilter()函数安装事件过滤器,并将事件过滤器对象设置为this:
```
m_pDispWidget->installEventFilter(this);
```
2. 重写事件过滤器的eventFilter()函数,当接收到窗口激活事件时,判断是否遮盖了m_pDispWidget窗口:
```
bool YourClass::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::WindowActivate) {
// 判断是否遮盖了m_pDispWidget窗口
if (m_pDispWidget->isVisible() && m_pARAugmentedRealityOneSenceCover->isVisible()) {
QRect rect1 = m_pDispWidget->geometry();
QRect rect2 = m_pARAugmentedRealityOneSenceCover->geometry();
if (rect1.intersects(rect2)) {
m_pARAugmentedRealityOneSenceCover->hide();
}
}
}
return QObject::eventFilter(obj, event);
}
```
3. 在你的类的构造函数中,将m_pARAugmentedRealityOneSenceCover窗口设置为无父窗口的顶级窗口,并显示出来:
```
m_pARAugmentedRealityOneSenceCover->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
m_pARAugmentedRealityOneSenceCover->show();
```
这样,当其他窗口遮盖了m_pDispWidget窗口时,m_pARAugmentedRealityOneSenceCover窗口会自动隐藏。
阅读全文