2016-03-29 22 views
2

Qtが新しく、いくつか問題があります。QGraphicsSceneでビデオの上に線を描く

私はボタンをクリックすると、オーバーレイのようなビデオに単純な線を描こうとしています。 私のビデオはカメラからのもので、QGraphicsScene(またはQframe)に表示されます。これはライブビデオです。

paintEventを修正しようとしましたが、新しいフレームが来るとラインが現れて消えます。

また、いくつかの属性(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ボタンスロット:

私はQtの4.8.6

EDIT 私は親としてQGraphicsViewオブジェクトと、透明のQWidget(setOpacity)を作成しようとしましたが、それはうまくいきませんでしたと組込みLinux、上のよ

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(); 

、ウィジェットが白く表示されます。私はX11のコンポジションマネージャーが必要だと思います(それは私が様々なウェブサイトから読んだものです)。これが機能するためにあなたの助けを

おかげで、 挨拶

+0

'QGraphicsScene'を使用している場合は、[drawForeground](http://doc.qt.io/qt-5/qgraphicsscene.html#drawForeground)をオーバーライドする方がよいでしょう。 – TheDarkKnight

+1

ビデオアイテムの上に別のグラフィックアイテムを追加するだけで、それを使ってラインを描画するのはどうですか? – dtech

+0

@TheDarkKnight私はこれを試しました。ラインが現れ、ビデオの下で即座に消えます。 – PierreOlivier

答えて

0

適切にあなたはQtの-提供される機能を使用する必要があります。この素晴らしいチュートリアルで説明したように、ビデオを再生するためVideoGraphicsItemを使用

  1. を: http://doc.qt.io/qt-5/qtmultimedia-multimediawidgets-videographicsitem-example.html
  2. QGraphicsLineItemを使用してシーンにラインを追加します。

QtマルチメディアにはGStreamerバックエンドが付属しているので、既存のGStreamer入力を組み込むのは簡単です。

+0

TheDarkKnightの方法と同じですが、簡単に表示されます。 – PierreOlivier

+0

ビデオを埋め込むコードとは何ですか? – ypnos

+0

ビデオはカメラから送られ、ストリームはgstreamerによって作成され、[videooverlay](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/)で表示されます。 gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle) QGraphicsViewのこの世代(gst_video_overlay_set_window_handle)番目のWinIdを与えます。 – PierreOlivier