我不能用 QPainter 绘制 QVideoWidget

Posted

技术标签:

【中文标题】我不能用 QPainter 绘制 QVideoWidget【英文标题】:I cant paint QVideoWidget with QPainter 【发布时间】:2012-06-05 03:38:26 【问题描述】:

我正在尝试在播放视频时绘制字符串,例如字幕... 我有一个 Phonon::QVideoWidget,在它的构造函数中我做了:

painter = new QPainter(this);

我已经将paint事件覆盖到这个,仅用于测试:

void MyVideoWidget::paintEvent(QPaintEvent* event)

    painter->drawLine(0, 0, 1, 1);
    //painter-> anything shows

所以当我启动我的播放器时,我看不到 QPainter 所做的任何事情,只有正常的视频播放 有什么想法吗?

【问题讨论】:

为画家设置可见的钢笔颜色wrt背景并尝试... 【参考方案1】:

paintEvent() 函数中将QPainter 设为本地实例更为常见。

QPainter painter(this);

这会导致自动调用begin()end() 方法。这些是QPainter 正常工作所必需的。您可以尝试在 paintEvent() 中手动调用它们,看看是否会有所不同。

您可以尝试在视频上叠加文本的另一件事是在代码中创建QLabel 并将您的视频小部件设为其父级。这不需要子类化视频小部件或覆盖绘制事件。

【讨论】:

...您对 QLabel 的建议让您可以覆盖它的paintEvent,这样您就可以独立于视频小部件制作自己的绘图。 我尝试使用 QPainter 本地实例,但也没有用。我开始认为 VideoWidget 不使用 PaintEvent 来渲染视频...我会尝试使用 QLabel,如果它有效,我会再次在此处发布并标记您的回答,谢谢 它有效,但是当 VideoWidget 更改帧本身时,透明背景的 QLabel 不会重新绘制,我现在很确定 VideoWidget 不使用paintEvent 来呈现视频......任何想法播放视频时如何使字幕标签自行重新绘制?使用计时器不是一个好主意,不是吗?谢谢 您可以尝试另一种对我有用的方法来回答类似问题:***.com/a/3692993/31044

以上是关于我不能用 QPainter 绘制 QVideoWidget的主要内容,如果未能解决你的问题,请参考以下文章

Qt音视频开发23-视频绘制QPainter方式(占用CPU)

Qt音视频开发23-视频绘制QPainter方式(占用CPU)

使用 QPainter 在 QWidget 上绘制 QPixmap Rects

如何使用 Qpainter 在 Qt 中绘制棋盘

QPainter 仅在 QImage 上绘制矩形的一部分

如何使用 Qt QPainter 绘制线性渐变弧?