如何使用 QML中的 VideoOutput 显示由C++代码生成的图像数据

本文详细介绍了如何在QT环境中,利用QML的VideoOutput组件显示由C++代码生成的YUYV格式图像数据。通过创建一个包含可写videoSurface属性的C++类,并将其注册到QML中,实现了VideoOutput从C++接收图像数据并显示的功能。文中提供了一步步的代码实例,包括创建QML工程、编写C++类、连接信号槽以及展示最终效果。
摘要由CSDN通过智能技术生成


前言

本文主要介绍在 QT 中如何使用 QML 中的 VideoOutput 来显示由 C++ 代码生成到内存中的图像数据,要求读者对QML以及 QML 和 C++ 的交互方式有一定的了解。
关键词: QML VideoOutput C++
软硬件环境:
硬件:PC
软件:Windows11 Qt5.12.2


一、使用 VideoOutput 显示一张YUYV 图片实例

VideoOutput 是一个 QML Types, 用于显示图像数据,如下图所示,是Qt Creator IDE 环境中帮助文档中对videoOutput 的介绍
在这里插入图片描述
VideoOutput 常见的用法是 接收来自于MediaPlayer 或 Camera (QML Type)传递过来的数据进行显示 ,只需要简单的QML 代码就可以实现(本文就不介绍了)
如下图所示,是VideoOutput 的 source property 的官方描述, 要使用QML 的 VideoOutput 显示由C++ 代码生成的图像数据,VideoOutput 的source property 需要是基于 QObject 的类并提供可写 videoSurface 属性,可以接受基于 QAbstractVideoSurface 的类
在这里插入图片描述
Qt 官方帮助文档里面给的实例如下图所示
在这里插入图片描述

二、代码实例

1.创建 一个qml 工程

详见我之前的文章 使用Qt Creator 创建 一个 QML 工程(一)

2. 添加一个基于 QObject 并带有可写 videoSurface 属性的C++ class 到 qml 工程中

class videoframeprovider 的 videoframeprovider.h 代码如下

#ifndef VIDEOFRAMEPROVIDER_H
#define VIDEOFRAMEPROVIDER_H

#include <QObject>
#include <QAbstractVideoSurface>
#include <QVideoSurfaceFormat>


class videoframeprovider : public QObject
{
   
    Q_OBJECT
    Q_PROPERTY(QAbstractVideoSurface *videoSurface READ videoSurface WRITE setVideoSurface)
public:
    explicit videoframeprovider(QObject *parent = nullptr);
    ~videoframeprovider();

    QAbstractVideoSurface *videoSurface();
    void setVideoSurface(QAbstractVideoSurface *surface);
    Q_INVOKABLE void makedata();
    void setFormat(int width, int heigth, QVideoFrame::PixelFormat format);

signals:
    void newvideoFrame(const QVideoFrame &frame);

public slots:
    void onNewVideoContentReceived(const QVideoFrame &frame);

private:
    QAbstractVideoSurface *m_surface = nullptr;
    QVideoSurfaceFormat m_format;

};

#endif // VIDEOFRAMEPROVIDER_H

class videoframeprovider 的 videoframeprovider.cpp 代码如下

#include "videoframeprovider.h"
#include <QFile>

videoframeprovider::videoframeprovider(QObject *parent) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值