Qt 使用设置透明窗口B 和窗口A的从属关系,而非父子关系,源码实现窗口B叠加另一个窗口A
时间: 2023-07-19 08:04:11 浏览: 119
在 Qt 中,可以使用 `setParent()` 函数来设置窗口的父子关系,但是如果需要实现透明窗口B叠加在窗口A上面,可以使用以下步骤:
1. 将窗口A的属性设置为 `Qt::WA_TransparentForMouseEvents`,这样窗口A就不会接收鼠标事件了。
```cpp
windowA->setAttribute(Qt::WA_TransparentForMouseEvents);
```
2. 将窗口B的属性设置为 `Qt::FramelessWindowHint`,这样就可以去掉窗口B的边框。
```cpp
windowB->setWindowFlags(Qt::FramelessWindowHint);
```
3. 将窗口B设置为窗口A的子窗口,并设置窗口B的位置和大小。
```cpp
windowB->setParent(windowA);
windowB->move(0, 0);
windowB->resize(windowA->size());
```
这样就可以实现窗口B叠加在窗口A上面了。需要注意的是,如果窗口B中有控件需要接收鼠标事件,那么需要将这些控件的属性设置为 `Qt::WA_TransparentForMouseEvents`。
阅读全文