Qt 一直 将视频播放到窗口C 中时,则需要半透明透明窗口D非C的子窗口。窗口C 才可正常播放。如果想要 一个无论如何移动或者改变大小C窗口,半透明窗口D都可以悬浮于窗口C,当C被其他窗口遮挡时,D也不会展现。即就好像D是C的子窗口一样,Qt Cpp 源码如何实现?
时间: 2023-07-19 08:03:53 浏览: 44
你可以通过以下步骤实现:
1. 创建一个 QWidget 类型的窗口,命名为 C 窗口,并设置它为视频播放器。
2. 创建一个 QWidget 类型的窗口,命名为 D 窗口,并将其设置为半透明。
3. 将 D 窗口设置为 C 窗口的子窗口,这样 D 窗口就可以悬浮在 C 窗口上方了。
```
D->setParent(C, Qt::Dialog);
```
4. 在 C 窗口的 paintEvent 事件中绘制视频。
5. 在 D 窗口的 paintEvent 事件中绘制半透明效果。
6. 为了让 D 窗口始终保持在 C 窗口的顶部,你可以在 C 窗口的 resizeEvent 和 moveEvent 事件中重新设置 D 窗口的位置和大小。
```
void C::resizeEvent(QResizeEvent *event)
{
D->resize(event->size());
}
void C::moveEvent(QMoveEvent *event)
{
D->move(event->pos());
}
```
7. 如果 C 窗口被其他窗口遮挡,D 窗口也不会展现,这是由于它们属于同一个父窗口。你可以将 D 窗口设置为顶层窗口,这样它就不会被其他窗口遮挡了。
```
D->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
D->show();
```