【发布时间】: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