我是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的合成经理(这是我从各个网站上读到的)。
感谢您的帮助, 问候
答案 0 :(得分:0)
为了使其正常工作,您需要使用Qt提供的功能:
VideoGraphicsItem
播放视频,如本教程中所述:http://localhost/B2BWebSite/Description/ProductDetail/3 QGraphicsLineItem
在场景中添加一行。请注意,Qt Multimedia附带了GStreamer后端,因此很容易合并您现有的GStreamer输入。