在QGraphicsScene中的视频上画一条线

我是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

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

谢谢你的帮助,问候

回答(1)

2 years ago

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

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