播放软件主窗口重新实现函数changeEvent,解决最小化之后界面不刷新问题。

void VRS::changeEvent(QEvent * event)
{//最小化之后再恢复到之前状态,界面会出现不update的问题,下面这段代码解决此问题 if( event->type() == QEvent::WindowStateChange){this->setAttribute(Qt::WA_Mapped);  }
}

播放软件实现了多窗口同时播放多路视频。在切换不同的视频窗口时出现背景图片刷新闪屏。

播放视频的widget类派生自QWidget,重新实现paintEvent函数,绘制背景图片。

void CSSAWidget::paintEvent(QPaintEvent *)
{////由于继承了QWidget,必须重载paintevent才能绘制背景QStyleOption opt;opt.initFrom(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);p.drawPixmap(0, 0, width(), height(), m_pixMapBG);//绘制背景
}

问题是在视频播放过程中,当播放软件重绘的时候(比如调用update、repaint等函数时),会重绘widget背景,导致播放视频闪烁。

  • 结合网上查找方案和Qt官方文档之后,设置widget属性setAttribute(Qt::WA_OpaquePaintEvent); 之后,在软件上进行其他窗口切换的时候不再刷新背景。
    Qt官方文档解释如下:To rapidly update custom widgets that constantly paint over their entire areas with opaque content, e.g., video streaming widgets, it is better to set the widget’s Qt::WA_OpaquePaintEvent, avoiding any unnecessary overhead associated with repainting the widget’s background.快速刷新需要在整个窗口区域持续绘制不透明内容自定义widget,比如视频流widget,最好设置Qt::WA_OpaquePaintEvent属性来避免任何不必要的过度重绘背景。

    Qt::WA_OpaquePaintEvent属性的解释如下:Indicates that the widget paints all its pixels when it receives a paint event. Thus, it is not required for operations like updating, resizing, scrolling and focus changes to erase the widget before generating paint events. The use of WA_OpaquePaintEvent provides a small optimization by helping to reduce flicker on systems that do not support double buffering and avoiding computational cycles necessary to erase the background prior to painting. Note: Unlike WA_NoSystemBackground, WA_OpaquePaintEvent makes an effort to avoid transparent window backgrounds. This flag is set or cleared by the widget’s author.

  • 虽然使用上述方法,当操作一直在软件上时不再出现重绘背景的问题。但是当软件失去焦点,再重新获取焦点时,依旧会出现重绘背景。经过调查后发现一种解决方法:在视频播放开始后调用函数setUpdatesEnabled(false)设置widget不刷新,在视频播放结束之后调用函数setUpdatesEnabled(true)设置widget刷新。这种方式能够完全避免播放视频过程中背景闪现问题。

Qt QWidget播放视频背景图片闪烁相关推荐

  1. Qt之QWidget设置窗口背景图片的几种方法

    Qt之QWidget设置窗口背景图片的几种方法 几种方法如下: 1.使用调色板QPalette来设置图片 QPalette pal =this->palette(); pal.setBrush( ...

  2. QT重写QPushButton的背景图片及填充

    QT重写QPushButton的背景图片及填充 刚学习完QT的基本使用,使用已知知识重写QPushButton类 刚学习完QT的基本使用,使用已知知识重写QPushButton类 因为要使用QT来实现 ...

  3. [转]解决IE下CSS背景图片闪烁的Bug

    [转]解决IE下CSS背景图片闪烁的Bug <P>        很多时候我们要给一些按钮或是img设置背景,而为了达到数据与表现样式分离的效果,通常背景样式都是在CSS里设定的,但是这个 ...

  4. 如何在大屏幕上滚动播放视频、图片和文字

    传统方法 在各种大屏上滚动播放视频.图片和文字的方法通常有如下两种: 1)使用视频播放软件,创建播放列表进行播放 2)使用信息发布系统,创建播放列表进行播放 第1种方法相对比较Low,需要到连接屏幕的 ...

  5. 背景随意更换,同时改变多个竖屏短视频背景图片的两种方法

    怎么在电脑上批量剪辑多个短视频呢?比如改变多个竖屏短视频的背景图,下面可以随小编一起用视频剪辑高手来试试. 一.直接添加上下图片 运行视频剪辑高手,在"批量剪辑视频"功能上,单击& ...

  6. 3款大屏播放软件,用法很详细,用于大屏幕播放视频和图片

    要在展厅或户外的LED大屏幕上长时间循环播放视频或图片,就需要用到大屏播放软件,笔者整理几款好用的给大家. 一.动屏大屏播放软件 特点 这款软件的特点是配置简单,界面美观,即插即用,将视频或图片文件拷 ...

  7. 安卓开发,拼接屏幕、大屏幕、户外广告无人值守循环播放视频,图片。开机自动播放,断电后自动播放,重起后自动播放功能

    安卓开发,拼接屏幕.大屏幕.户外广告无人值守循环播放视频,图片.开机自动播放,断电后自动播放,重起后自动播放功能 因客户要求,开机自动播放视频,不需要电脑控制,通电自动循环播放视频. 电脑成本太高,最 ...

  8. 1.QT中播放视频,录音程序的编写

     1  通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gu ...

  9. Qt中QLabel的背景图片设置问题

    在Qt开发的过程中,经常会遇到设置Label的背景图片问题,通常可以有一下两种方法设置: 方法1:通过setScaleContents来设置(有时候会出现svg图片无法自适应label大小的问题) Q ...

最新文章

  1. 《大红包》电影观后感
  2. 第10课:优化神经网络——如何防止过拟合
  3. linux 截取后缀名,Shell 截取文件名和后缀
  4. Android第二十四期 - 游戏公告跑马灯效果
  5. 杀毒行业暴利?8条杀毒行业之我见
  6. python实现SGD(stochastic gradient descent)算法
  7. 驱动精灵修复服务器,驱动精灵一键修复系统组件工具
  8. 优盘文件或目录损坏且无法读取怎样解决
  9. fatal error C1083:/fatal error C1010: 错误处理
  10. 前端在登录时如何将用户密码加密
  11. 优酷网(YOUKU.com)介绍
  12. 优秀网页设计:20个国外大学网站设计欣赏
  13. 奇异值分解的物理意义
  14. 港科夜闻|2022年香港科大气候适应及复原力大会圆满闭幕,政经领袖研讨香港气候政策与绿色金融发展...
  15. vue/cli删除预设记录
  16. 如何禁止视频在手机移动端页面中全屏播放
  17. 转盘式视觉筛选机及其图像识别系统
  18. paddledet 训练旋转目标检测 ppyoloe-r 训练自己的数据集
  19. 微信小程序(小游戏)的示例
  20. 84个SEO面试问题

热门文章

  1. 计算机专业b区大学,b区考研学校,b区考研学校排名。
  2. 23种设计模式——UML类图+简要分析+例题
  3. 2018-2019-2学号20189220余超《移动平台应用程序开发实践》课程总结
  4. Python中的排除sort函数的参数key:a.sort(key=lambda x: x[1])是什么意思
  5. awk 4.0+ man手册翻译第一版本
  6. 比比网开源的一款头像制作小程序
  7. 复制淘宝店需要设置那些?
  8. 如何注册一个顶级域名?需要注意哪些事项?
  9. <textarea></textarea> placeholder属性不显示
  10. 【Git版本控制管理】Gitee(码云)和GitHub的使用