Qt cpp 将视频数据绘制到 QWidget A 的离屏表面, 如何在QWidget上方 再放置一个透明窗口
时间: 2023-12-03 22:44:23 浏览: 133
可以使用 Qt 的 QGraphicsView 和 QGraphicsScene 类来实现在 QWidget 上方放置一个透明窗口。
首先,创建一个 QGraphicsView 对象,并将其设置为透明:
```cpp
QGraphicsView* view = new QGraphicsView(widget);
view->setStyleSheet("background: transparent");
view->setAttribute(Qt::WA_TranslucentBackground, true);
view->setFrameShape(QFrame::NoFrame);
view->show();
```
然后,创建一个 QGraphicsScene 对象,并将其设置为与 QWidget A 的大小相同:
```cpp
QGraphicsScene* scene = new QGraphicsScene(widget);
scene->setSceneRect(0, 0, widget->width(), widget->height());
```
接下来,创建一个 QGraphicsPixmapItem 对象,并将其添加到 QGraphicsScene 中:
```cpp
QGraphicsPixmapItem* pixmapItem = new QGraphicsPixmapItem();
scene->addItem(pixmapItem);
```
然后,将 QWidget A 的离屏表面设置为 QGraphicsPixmapItem 的 pixmap:
```cpp
QPixmap pixmap = ... // 获取视频数据并转换为 QPixmap 对象
pixmapItem->setPixmap(pixmap);
```
最后,将 QGraphicsView 的场景设置为 QGraphicsScene,并将其移动到 QWidget A 的上方:
```cpp
view->setScene(scene);
view->move(widget->mapToGlobal(QPoint(0, 0)));
```
这样就可以在 QWidget A 上方放置一个透明窗口,并将视频数据绘制到 QWidget A 的离屏表面上。
阅读全文