Qt 一直 将视频播放到窗口C 中时,且一定不可以将半透明窗口D设置为C的子窗口。窗口C 才可正常播放。如果想要 一个无论如何移动或者改变大小C窗口,半透明窗口D都可以悬浮于窗口C,当C被其他窗口遮挡时,D也不会展现。即就好像D是C的子窗口一样,Qt Cpp 源码如何实现?
时间: 2023-07-19 08:03:53 浏览: 74
源码 悬浮窗 悬浮窗口和半透明实现效果.zip
可以通过使用QWidget::createWindowContainer()函数将视频播放器包装为一个QWidget对象,并将该QWidget对象作为窗口C的子窗口。然后,可以通过设置QWidget::setAttribute(Qt::WA_TransparentForMouseEvents)属性,使窗口D在C被遮挡时不响应鼠标事件,在窗口C上方悬浮。最后,可以使用QWidget::setWindowFlags()函数设置窗口D的标志,以使其在窗口C被最小化或关闭时也随之被隐藏。以下是基本的实现代码:
```cpp
// 创建视频播放器并包装为QWidget对象
QMediaPlayer* mediaPlayer = new QMediaPlayer;
QVideoWidget* videoWidget = new QVideoWidget;
mediaPlayer->setVideoOutput(videoWidget);
QWidget* videoContainer = QWidget::createWindowContainer(videoWidget, this);
// 设置窗口D的属性和标志
videoContainer->setAttribute(Qt::WA_TransparentForMouseEvents);
videoContainer->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
// 将视频容器作为窗口C的子窗口
videoContainer->setParent(this);
videoContainer->move(0, 0);
videoContainer->resize(this->size());
```
其中,this代表窗口C的指针。需要注意的是,视频容器的大小应该与窗口C的大小保持一致,并且在窗口C大小改变时需要相应地调整视频容器的大小。
阅读全文