Qt 如何实现 没有父窗口的透明窗口D,永远保持在窗口C之前,且当其他窗口遮挡C时,隐藏半透明窗口D
时间: 2023-07-19 07:03:52 浏览: 170
Qt 透明窗口实现.各个Item 管理自己的透明度
5星 · 资源好评率100%
可以通过设置窗口属性`Qt::WindowStaysOnTopHint`使窗口D永远保持在窗口C之前,然后使用`setWindowOpacity`函数设置窗口D的透明度。当其他窗口遮挡窗口C时,可以使用事件过滤器监听窗口C的`QEvent::WindowActivate`和`QEvent::WindowDeactivate`事件,当窗口C失去焦点时隐藏窗口D,当窗口C重新获得焦点时显示窗口D。以下是示例代码:
```
// 创建窗口D
QDialog *dialogD = new QDialog();
dialogD->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
dialogD->setAttribute(Qt::WA_TranslucentBackground, true);
// 设置窗口D的透明度
dialogD->setWindowOpacity(0.5);
// 监听窗口C的事件
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (watched == m_windowC && event->type() == QEvent::WindowActivate) {
// 窗口C获得焦点时显示窗口D
dialogD->show();
} else if (watched == m_windowC && event->type() == QEvent::WindowDeactivate) {
// 窗口C失去焦点时隐藏窗口D
dialogD->hide();
}
return QMainWindow::eventFilter(watched, event);
}
```
阅读全文