在QGraphicsScene中的视频上画一条线

时间:2016-03-29 15:13:43

标签: 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();

我使用Qt 4.8.6进行linux嵌入式操作

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

感谢您的帮助, 问候

1 个答案:

答案 0 :(得分:0)

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

  1. 使用VideoGraphicsItem播放视频,如本教程中所述:http://localhost/B2BWebSite/Description/ProductDetail/3
  2. 使用QGraphicsLineItem在场景中添加一行。
  3. 请注意,Qt Multimedia附带了GStreamer后端,因此很容易合并您现有的GStreamer输入。