ZBLOG

// 假设你在 UI 设计器中添加了一个 QWidget,并将其对象名称设置为 videoContainer。 QWidget *videoContainer = ui->widget1; // 创建 Video Widget 用于显示摄像头画面 videoWidget = new QVideoWidget(videoContainer); // 使用布局管理器以便能够适应 widget 的大小变化 (可选) QVBoxLayout *...

要在你的代码基础上实现视频水平翻转(镜像效果),可以通过 QGraphicsVideoItem + QGraphicsView 替换原有的 QVideoWidget。以下是修改后的完整代码:


修改后的代码(实现水平翻转)

// 假设你在 UI 设计器中添加了一个 QWidget,对象名称为 videoContainer
QWidget *videoContainer = ui->widget1;

// 创建图形场景和视图容器
QGraphicsScene *scene = new QGraphicsScene(videoContainer);
QGraphicsView *graphicsView = new QGraphicsView(scene);
graphicsView->setStyleSheet("background: transparent; border: none;"); // 透明背景

// 创建 VideoItem 并设置水平翻转
QGraphicsVideoItem *videoItem = new QGraphicsVideoItem();
videoItem->setTransform(QTransform::fromScale(-1, 1)); // x轴缩放-1实现翻转
videoItem->setPos(videoContainer->width(), 0);         // 补偿位置偏移(避免画面左移)

// 将 VideoItem 添加到场景中
scene->addItem(videoItem);

// 使用布局管理器适应容器大小 (可选)
QVBoxLayout *layout = new QVBoxLayout(videoContainer);
layout->addWidget(graphicsView);
layout->setContentsMargins(0, 0, 0, 0); // 去除边距

// 检查摄像头并启动
const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
if (!cameras.isEmpty()) {
    camera = new QCamera(cameras.first());
    camera->setViewfinder(videoItem); // !!!关键:输出到 GraphicsVideoItem!!!
    camera->start();
} else {
    qWarning("No cameras available");
}

关键改动说明

  1. 替换 QVideoWidget

    • QGraphicsVideoItem + QGraphicsView 替代原生的 QVideoWidget
    • setTransform(QTransform::fromScale(-1, 1)):通过 x轴负缩放实现水平翻转。
  2. 位置补偿

    • setPos(videoContainer->width(), 0):翻转后画面会向左偏移,需手动调整回原位。
  3. 性能优化

    • Qt Graphics View Framework默认启用硬件加速,适合实时视频处理。

其他注意事项

  • 动态调整窗口大小时:需要重写容器的 resizeEvent,更新 videoItem的位置:
void YourClass::resizeEvent(QResizeEvent *event) {
    if (videoItem) {
        videoItem->setPos(event->size().width(), 0);
    }
}
  • OpenGL方案:如果需要更高性能(如60FPS以上),可参考之前的 OpenGL Shader方法。

如果需要进一步优化或解释某个细节,可以随时告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23846

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?