当前位置: 首页 > news >正文

Qt如何实现动态背景-视频背景

前言

需求:加载视频作为视频背景,在上层可以进行图片的动画化,或是进行其他操作。

几种方法:

1、直接将视频弄成一个QDialog, 然后再上层在弄一个QDialog,背景透明即可。但遇到一个问题,QDialog没办法局部透明。

2、使用QOpenGLWidget: 这个方案没有使用。

3、使用QGraphicsVideoItem:当前使用的是这个方案,但这个方案有缺陷,有可能不支持某些mp4文件。所以,会导致显示不成功。

正文

一、QVideoWidget + QMediaPlayer

1、成功运行的代码

ui->setupUi(this);
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);//无边框player = new QMediaPlayer;
videoWidget = new QVideoWidget();
player->setVideoOutput(videoWidget);
player->setMedia(QUrl::fromLocalFile("./product/video/test1.mp4"));QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(videoWidget);
ui->wgtVideo->setLayout(layout);
videoWidget->show();
player->play();
show();

2、遇到的问题

3、工程代码

二、QGraphicsVideoItem + QMediaPlayer

1、成功运行的代码

#include <QApplication>
#include <QMediaPlayer>
#include <QGraphicsVideoItem>
#include <QGraphicsView>
#include <QGraphicsScene>int main(int argc, char *argv[])
{QApplication a(argc, argv);QGraphicsScene scene;QGraphicsView view(&scene);view.resize(1280, 720);QGraphicsVideoItem item;scene.addItem(&item);item.setSize(QSizeF(1280, 720));item.setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);QMediaPlayer player;player.setVideoOutput(&item);player.setNotifyInterval(2000);//设置信息更新周期为2000msplayer.setMedia(QUrl::fromLocalFile("./product/video/test2.mkv"));player.play();view.show();return a.exec();
}

效果:

在这里插入图片描述

2、遇到的问题

1、DirectShowPlayerService::doRender: Unknown error 0x80040200.

由于QGraphicsVideoItem支持的视频格式是有限的,所以有可能是不支持mp4文件的,转换成mkv文件就成功了。后面我又换了一个mp4文件,就没啥问题了,所以是我之前的那个测试的mp4文件时有问题的,我的测试视频是从这里下载的: https://sample-videos.com/index.php#sample-mp4-video

还有可能是驱动没装:QMediaPlayer的驱动:

链接:https://pan.baidu.com/s/13aEhts8ipAYv6TD2WFIo7Q
提取码:1111

还有可能是LAV Filter: https://blog.csdn.net/weixin_45827203/article/details/105220756

以下是错误的可能性:

  1. 视频格式:QGraphicsVideoItem 只支持某些视频格式。请确保您的视频格式是支持的。通常情况下,支持 H.264 和 MPEG-4 等常见格式。
  2. 文件路径:请确保您提供给 QGraphicsVideoItem 的视频文件路径是正确的。如果视频文件不存在或路径不正确,它将无法播放。
  3. 缺少解码器:如果您的系统上缺少适当的解码器,QGraphicsVideoItem 将无法正常播放视频。您可以尝试在您的系统上安装适当的解码器以解决此问题。
  4. 硬件加速:通常,硬件加速会加速视频播放,并减少 CPU 使用率。但有时启用硬件加速可能导致播放问题。如果您启用了硬件加速,请尝试禁用它,并查看视频是否可以成功播放。
  5. 版本兼容性:QGraphicsVideoItem 可能与某些特定版本的 Qt 或操作系统版本不兼容。请确保您使用的 Qt 版本是最新的,并且与您的操作系统兼容。另外,请确保您的操作系统已经安装了必要的更新和修补程序。
  6. 其他问题:如果视频仍然无法播放,请检查是否存在其他问题,比如媒体库文件损坏或者与播放器相关的问题。在这种情况下,您可以尝试使用其他的媒体库或播放器来测试您的视频文件。

3、工程代码

参考

一、下载测试视频的网站

1、https://www.motionplaces.com/paris/

2、https://www.videvo.net/video/raindrops-in-super-slow-motion/3313/#rs=video-box

3、4K、高清、无水印视频素材库,你要的素材来啦~

1、测试视频下载网站

二、解决该问题所遇到的比较有用的网站

2、https://cloud.tencent.com/developer/ask/sof/106854758:因为Qt不允许透明背景的小部件在视频上呈现。背景显示为黑色,而不是实际的视频。

3、Qt踩坑记001:无法在读取相机图像的取景器QVideoWidget/QGraphicsVideoItem上显示图片

4、Qt疑难杂症:无法QVideoWidget播放器上浮控件-解释原因

5、视频播放

6、QT多媒体 播放视频并显示字幕

7、使用Qt进行音视频播放

8、可以免费对视频进行切割

相关文章:

Qt如何实现动态背景-视频背景

前言 需求&#xff1a;加载视频作为视频背景&#xff0c;在上层可以进行图片的动画化&#xff0c;或是进行其他操作。 几种方法&#xff1a; 1、直接将视频弄成一个QDialog&#xff0c; 然后再上层在弄一个QDialog,背景透明即可。但遇到一个问题&#xff0c;QDialog没办法局…...

vue按键全屏和F11全屏共存

以下代码可直接复制 注意此段代码 // let element document.documentElement // 当前页所有元素全屏 let element document.getElementById(‘div1’) //让某个div元素全屏 <template><div><div style"width: 300px;height: 300px;background-color: cya…...

springboot就业信息管理系统springboot32

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…...

深入探讨芯片制程设备:从原理到实践

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 在现代科技领域&#xf…...

Vuex的简介以及入门案例

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…...

上海亚商投顾:沪指探底回升 华为汽车概念股集体大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日探底回升&#xff0c;早盘一度集体跌超1%&#xff0c;随后震荡回暖&#xff0c;深成指、创业板指…...

Android网络监听

1.通过注册BroadCastReceiver进行网络监听。 1) 添加网络权限 <uses-permission android:name"android.permission.INTERNET"/><uses-permission android:name"android.permission.ACCESS_NETWORK_STATE" /> 2&#xff09;定义BroadCastRe…...

Kubernetes 常用命令 持续更新

1、进入指定namespace pod kubectl exec -it --namespacekube-system g-lsb-proxy-nginx-r7zfl-2522744936-11rld /bin/sh kubectl exec -it g-lsb-proxy-nginx-r7zfl-2522744936-9tz5k -n kube-system /bin/bash2、查看k8s pod详情 kubectl describe pods -n jiankunking …...

达梦数据库常用命令行

导出dmp文件&#xff08;迁移用&#xff09; 管理工具在dmdbms下的tool文件夹下 使用tool目录下的manage程序&#xff0c;导出dmp文件 导入dmp文件 切到tool目录下 ./dimp 用户id/密码ip:5236 file"导入的文件路径(包括文件名)" 导入的模式&#xff08;一般与库名…...

【通信系列 6 -- AT 命令介绍】

文章目录 1. 背景介绍1.2 AT的命令格式1.3 AT指令用法1.3.1 指令执行结果 1.2 CP 常用AT指令1.2.1 CP 模式设置1.2.2 网络相关1.2.3 IP获取1.2.4 Band 设置1.2.5 电话相关1.2.6 SIM卡检测1.2.7 cmwap 和cmnet1.2.8 AT 写 IMEI 1. 背景介绍 AT 命令一般分为三种&#xff1a; C…...

flask捕获@app.errorhandler/@app.after_request全局异常总结

捕获处理全局异常的方法有两种&#xff1a;app.errorhandler、app.after_request1、第一种的使用&#xff0c;需要将flask的debug开关打开才能生效&#xff08;自动捕获异常&#xff09;&#xff0c;在config里面将DEBUG TRUE就可以&#xff08;默认是False&#xff09;。 但是…...

智能晾衣架丨以科技解放双手

以往的晾衣架大多是平放式、手摇式居多&#xff0c;为衣物的晾晒提供了一个“栖身之所。”随着科技的日新月异&#xff0c;智能家居的产品越来越多。晾衣架也不例外&#xff0c;一款带有语音控制升降、同时具备照明和消毒的多功能衣架也已深入生活&#xff0c;正被人们所接受。…...

asp.net饭店订餐管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机设计定制

一、源码特点 asp.net 饭店订餐管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net饭店订餐系统 二、功能介…...

Pushgateway的场景使用

1,Pushgateway简介 Pushgateway为Prometheus整体监控方案的功能组件之一,并做为一个独立的工具存在。它主要用于Prometheus无法直接拿到监控指标的场景,如监控源位于防火墙之后,Prometheus无法穿透防火墙;目标服务没有可抓取监控数据的端点等多种情况。在类似场景中,可通…...

时间范围配置(昨天,今天,本周,本月,本季度,本年)

ranges:{ ‘昨天’: [ moment(moment().subtract(1, ‘days’).format(‘YYYY-MM-DD 00:00:00’)) ,moment(moment().subtract(1, ‘days’).format(‘YYYY-MM-DD 23:59:59’))], ‘今天’: [ moment(moment().format(‘YYYY-MM-DD 00:00:00’)),moment( moment().format(‘YYY…...

PlantUML 绘图

官网 https://plantuml.com/zh/ 示例 绘制时序图 USB 枚举过程 PlantUML 源码 startuml host <-- device : device insert host note right : step 1 host -> device : get speed, reset, speed check note right : step 2 host -> device …...

spring boot自定义配置时在yml文件输入有提示

自定义一个配置类&#xff0c;然后在yml文件具体配置值时&#xff0c;一般不会有提示&#xff0c;这个解决这个问题 依赖 <!--自定义配置类&#xff0c;在yml文件写的时候会有提示--><dependency><groupId>org.springframework.boot</groupId><arti…...

Linux:I/O 5种模型

图片来源&#xff1a;https://pdai.tech/md/java/io/java-io-model.html...

企业提升效率的秘密武器,推荐J2L3x聊天软件!

随着企业竞争加剧&#xff0c;提高效率已成为每个企业都必须面对的挑战。然而&#xff0c;企业要想提高效率&#xff0c;仅仅依靠员工的努力往往难以取得显著的效果&#xff0c;因此&#xff0c;许多企业开始寻找适合自己的工具和软件来提高生产力。 有一种聊天软件与众不同&a…...

Android Termux安装MySQL,并使用cpolar实现公网安全远程连接[内网穿透]

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...