看起来您想创建一个叠加层。如果您查看WidgetVideo.cpp
vlc-qt 的源代码,您可以看到该request()
方法创建了一个小部件并将其添加到布局中,该布局是VlcVideoWidget
. 这可能与您在paintEvent
.
要创建应保留在视频顶部的叠加层,请按照此处概述的方法:http: //developer.nokia.com/community/wiki/How_to_overlay_QWidget_on_top_of_another
您应该将覆盖类的实例添加到TrackerWidgetVideo
. 覆盖类将包含paintEvent
当前属于您的TrackerWidgetVideo
. 然后,您将覆盖TrackerWidgetVideo::resizeEvent
以调整覆盖类实例的大小。
这是一些示例代码:
叠加层.h
class Overlay : public QWidget
{
Q_OBJECT
public:
Overlay(QWidget* parent);
protected:
void paintEvent(QPaintEvent* event);
};
叠加层.cpp
Overlay::Overlay(QWidget* parent) : QWidget(parent)
{
setPalette(Qt::transparent);
setAttribute(Qt::WA_TransparentForMouseEvents);
}
void Overlay::paintEvent(QPaintEvent* event)
{
QPainter p(this);
p.drawText(rect(), Qt::AlignCenter, "Some foo goes here");
}
TrackerWidgetVideo.h
class TrackerWidgetVideo : public VlcWidgetVideo
{
Q_OBJECT
public:
explicit VlcWidgetVideo(QWidget* parent = NULL);
protected:
void resizeEvent(QResizeEvent* event);
private:
Overlay* overlay;
};
TrackerWidgetVideo.cpp
TrackerWidgetVideo::TrackerWidgetVideo(QWidget* parent) : VlcWidgetVideo(parent)
{
overlay = new Overlay(this);
}
void TrackerWidgetVideo::resizeEvent(QResizeEvent* event)
{
overlay->resize(event->size());
event->accept();
}