c++ - 在 QGraphicsScene 中的视频上画一条线

标签 c++ qt video embedded-linux x11

我是 Qt 的新手,遇到了一些麻烦。

当我点击一个按钮时,我试图在视频上画一条简单的线,比如叠加层。 我的视频来自摄像头,显示在 QGraphicsScene(或 Qframe)中,是实时视频。

我试图修改 paintEvent,但是当一个新帧出现时,线条出现并消失。

我也尝试创建一个 Overlay 类,带有一些属性(WA_NoBackGround 和 WA_PaintOnScreen),但是这次线条出现在视频上,但视频停止了。

这是我的覆盖代码(灵感来自 Draw Rectangular overlay on QWidget at click):

Overlay.h

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPointer>

class Overlay : public QWidget
{
public:
    Overlay(QWidget * parent = 0) ;
protected:
    void paintEvent(QPaintEvent *e );
};

Overlay.cpp

#include "overlay.h"

Overlay::Overlay(QWidget *parent): QWidget (parent)
{
//setAttribute(Qt::WA_NoSystemBackground);
setAttribute(Qt::WA_NoBackground);

setAttribute(Qt::WA_PaintOnScreen);
}

void Overlay::paintEvent(QPaintEvent *e)
{
    QPainter p(this);
    p.drawLine(0,0,100,100);
}

clickDraw 按钮槽:

QPointer<Overlay> m_overlay;
w= static_cast<QWidget*>(ui->r_frame);

if (!m_overlay)
    m_overlay =  new Overlay(w->parentWidget());
m_overlay->setGeometry(w->geometry());
m_overlay->show();
update();

我在嵌入式 linux 上,使用 Qt 4.8.6

编辑 我试图创建一个透明的 Qwidget (setOpacity),将 QGraphicsView 对象作为父对象,但它不起作用,小部件显示为白色。我想我需要一个 X11 的组合管理器(这是我从各种网站上读到的)。

感谢您的帮助, 问候

最佳答案

要使其正常工作,您需要使用 Qt 提供的功能:

  1. 使用 VideoGraphicsItem 播放视频,如本教程中所述:http://doc.qt.io/qt-5/qtmultimedia-multimediawidgets-videographicsitem-example.html
  2. 使用 QGraphicsLineItem 向您的场景添加线条。

请注意,Qt Multimedia 带有 GStreamer 后端,因此应该很容易合并您现有的 GStreamer 输入。

关于c++ - 在 QGraphicsScene 中的视频上画一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36288293/

相关文章:

c++ - 来自数组的 QAudioInput

c++ - 更改对象的原点使其沿不同的轴移动

c++ - 如何在 QTableWidget 中通过 CTRL+click 禁用多项选择?

c++ - 双击QWidget

html - HTML5 视频上的容器( Canvas )

php - YouTube(或其他)视频的强制质量

c++ - 仅重新编译更改的文件(两步)

C++ 对 vector 或链表进行排序

c++ - 平台特定库的运行时或编译时?

iphone - iphone 上的内联 html5 视频