Qt 要求 窗口A不是窗口B的子窗口,透明窗口B一直覆盖在窗口A上方,源码实现
时间: 2023-07-19 15:03:19 浏览: 94
可以通过设置窗口B的属性为透明,然后使用窗口A的父窗口来实现这一需求。
以下是一个简单的例子,其中窗口A是一个QWidget,窗口B是一个QDialog:
```cpp
// 设置窗口B为透明
QDialog* transparentDialog = new QDialog();
transparentDialog->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool);
transparentDialog->setAttribute(Qt::WA_TranslucentBackground);
// 将窗口B设置为窗口A的父窗口
transparentDialog->setParent(widgetA);
// 显示窗口B
transparentDialog->show();
```
在这个例子中,我们首先创建了一个QDialog并将其设置为透明。然后,我们使用QWidget的setParent()函数将其设置为窗口A的父窗口。由于窗口B是透明的,并且有Qt::WindowStaysOnTopHint属性,它将始终位于窗口A的上方。最后,我们使用QDialog的show()函数显示窗口B。
需要注意的是,如果您想在窗口B上绘制内容,您需要在QDialog的paintEvent()函数中实现绘制逻辑。
阅读全文