【问题标题】:Draw a line over a video in a QGraphicsScene在 QGraphicsScene 中的视频上画一条线
【发布时间】:2016-03-29 15:13:43
【问题描述】:

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

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

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

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

这是我的叠加代码(灵感来自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 的组合管理器(这是我从各个网站上看到的)。

感谢您的帮助, 问候

【问题讨论】:

  • 如果您使用的是QGraphicsScene,那么覆盖drawForeground 可能是更好的方法。
  • 简单地在视频项目的顶部添加另一个图形项目,然后用它来画线怎么样?
  • @TheDarkKnight 我试过了,这条线出现了,然后在视频下立即消失了。

标签: c++ qt video embedded-linux x11


【解决方案1】:

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

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

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

【讨论】:

  • 和TheDarkKnight的方法一样,只是出现了一点。
  • 视频来自摄像头,流由gstreamer创建,由videooverlay显示,我给QGraphicsView的这个函数(gst_video_overlay_set_window_handle)这个WinId。
  • 嗯,这显然意味着小部件被视频覆盖,而 Qt 无法对此做任何事情。当您使用 X11 功能时。请参阅我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
相关资源
最近更新 更多