Qt 如何设置 没有父窗口的透明窗口D,永远保持在窗口C之前,且当其他窗口遮挡C时,隐藏半透明窗口D
时间: 2023-07-19 13:03:52 浏览: 41
可以使用 `setWindowFlags` 函数设置窗口的标志位来实现。具体步骤如下:
1. 创建没有父窗口的透明窗口 D,并设置它的 `Qt::FramelessWindowHint` 和 `Qt::WindowStaysOnTopHint` 标志位,分别表示该窗口没有边框,并且永远保持在最顶层。
2. 创建窗口 C,并设置它的背景为半透明。
3. 在窗口 C 的 `showEvent` 中,调用 `D.show()` 显示窗口 D。
4. 在窗口 C 的 `hideEvent` 中,调用 `D.hide()` 隐藏窗口 D。
这样就可以实现当其他窗口遮挡窗口 C 时,半透明窗口 D 会自动隐藏。具体代码如下:
```cpp
// 创建半透明窗口 C
QWidget* C = new QWidget();
C->setWindowFlags(Qt::FramelessWindowHint);
C->setAttribute(Qt::WA_TranslucentBackground);
C->setStyleSheet("background-color: rgba(255, 255, 255, 100);");
// 创建透明窗口 D
QWidget* D = new QWidget();
D->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
D->setAttribute(Qt::WA_TransparentForMouseEvents);
// 在窗口 C 的 showEvent 中显示窗口 D
void C::showEvent(QShowEvent* event)
{
D->show();
}
// 在窗口 C 的 hideEvent 中隐藏窗口 D
void C::hideEvent(QHideEvent* event)
{
D->hide();
}
```