我是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 回答
为了使其正常工作,您需要使用Qt提供的功能:
使用
VideoGraphicsItem
播放视频,如本教程中所述:http://doc.qt.io/qt-5/qtmultimedia-multimediawidgets-videographicsitem-example.html使用
QGraphicsLineItem
为场景添加一条线 .请注意,Qt Multimedia附带了GStreamer后端,因此应该很容易合并您现有的GStreamer输入 .