15-Qt制作视频播放控件(视频原始比例)窗口大小可自由缩放

本文介绍了如何使用Qt自定义控件实现视频播放,并保持原始比例,避免CPU占用过高和界面卡顿。通过继承QWidget并重载paintEvent,利用painter.drawPixmap绘制视频帧,实现高效显示。同时提供了按视频原始比例计算显示的方法和使用示例,以及源码分享。
摘要由CSDN通过智能技术生成

一、效果

在这里插入图片描述

二、实现原理

如果使用Qt的Label->setPixmap()来绘制图像,会导致CPU占用太高,解决办法是自定义控件,控件继承QWidget并重载paintEvent,然后调用painter.drawPixmap函数实现绘制一帧视频或图像。
注意:

  1. 不要继承QLabel并直接调用成员函数setPixmap来实现视频帧显示。这个方法会造成软件界面卡顿。且cpu使用率到60%。且兼有内存泄漏的问题。
  2. 不要继承QOpenGLWidget并重载paintEvent然后使用painter.drawPixmap来显示视频。此方法在Mac平台下测试发现。在缩放窗口的时候会造成视频有残影。

三、按视频原始比例显示视频的计算方法

在这里插入图片描述

四、使用方法与使用效果

本控件是一个基于QWidget的类,按照一个使用QWidget来添加到布局即可。
显示视频帧的对外公共函数如下:
void SetVideoPixmap(QPixmap &pixmap);
把视频帧转换为pixmap后,调用此函数显示即可。注意把视频解码之类的计算在非ui线程计算,即这个控件只做显示的部分。因此避免卡死ui现场造成软件界面“无响应”的现象。
实际在mac平台下测试,每秒播放24帧图像,图像原始尺寸100*100,cpu使用率9%

五、源码

因为源码很少,直接附到下面:
myvideowidget.h

#ifndef MYVIDEOWIDGET_H
#define MYVIDEOWIDGET_H

#include <QLabel>
#include <QRect>
#include <QPixmap>
#include <QResizeEvent>
#include <QWidget>
#include <QOpenGLWidget>


class MyVideoWidget : public QWidget //QOpenGLWidget //QLabel
{
   
    Q_OBJECT
public:
    explicit MyVideoWidget(QWidget *parent);
    ~MyVideoWidget() override;
    MyVideoWidget();

    void 
  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值