Qt 如何实现 没有父窗口的透明窗口D,永远保持在窗口C之前,且当其他窗口遮挡C时,隐藏半透明窗口D
时间: 2023-07-19 20:03:52 浏览: 47
可以使用Qt中的setWindowFlags()函数来设置窗口的属性,实现透明窗口并保持在某个窗口之前。具体步骤如下:
1. 创建一个透明窗口D,设置其透明度和窗口属性,使其不显示标题栏和边框。
```cpp
QWidget* transparentWidget = new QWidget;
transparentWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);
transparentWidget->setAttribute(Qt::WA_TranslucentBackground);
transparentWidget->setWindowOpacity(0.5);
```
2. 设置窗口D的父窗口为窗口C,使其永远在窗口C之前。
```cpp
transparentWidget->setParent(windowC);
```
3. 当其他窗口遮挡窗口C时,隐藏窗口D。
可以通过Qt的事件过滤器,在窗口C中监听其他窗口的遮挡事件。当检测到窗口C被遮挡时,隐藏窗口D。
```cpp
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::ActivationChange) {
if (!isActiveWindow()) {
transparentWidget->hide();
} else {
transparentWidget->show();
}
}
return QMainWindow::eventFilter(obj, event);
}
```
在窗口C的构造函数中,将事件过滤器设置为当前窗口。
```cpp
this->installEventFilter(this);
```
这样就可以实现没有父窗口的透明窗口D,永远保持在窗口C之前,且当其他窗口遮挡C时,隐藏半透明窗口D的效果了。