播放视频时在 qwidget 上绘图
Drawing on a qwidget while playing videos
我有一个 class A,它继承自 class,它继承自 QWidget。我的 class 包含一个媒体播放器和一个 QVideoWidget。每次播放列表中的新视频开始播放时,我的对象 A 都会在不是视频小部件的小部件部分绘制一个小矩形几毫秒。
所以,我已经连接了我的插槽
connect(player, &QMediaPlayer::currentMediaChanged,this,&videoDisplay::drawRect);
但我无法正确使用 drawRect 函数。尝试使用 QPainter 但它给了我错误
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
有什么建议吗?
谢谢
Qt
中的绘画通常只应作为 update
请求的结果执行。
与其尝试直接绘制,不如使用旗帜或类似物来表示新项目已从播放列表开始...
bool m_new_video;
然后只需使用 lambda 作为插槽并让它设置标志并请求 update
...
connect(player, &QMediaPlayer::currentMediaChanged,
[this]()
{
m_new_video = true;
update();
});
您的 videoDisplay::paintEvent
实现可以根据 m_new_video
.
的值绘制任何它必须绘制的内容
我有一个 class A,它继承自 class,它继承自 QWidget。我的 class 包含一个媒体播放器和一个 QVideoWidget。每次播放列表中的新视频开始播放时,我的对象 A 都会在不是视频小部件的小部件部分绘制一个小矩形几毫秒。 所以,我已经连接了我的插槽
connect(player, &QMediaPlayer::currentMediaChanged,this,&videoDisplay::drawRect);
但我无法正确使用 drawRect 函数。尝试使用 QPainter 但它给了我错误
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
有什么建议吗?
谢谢
Qt
中的绘画通常只应作为 update
请求的结果执行。
与其尝试直接绘制,不如使用旗帜或类似物来表示新项目已从播放列表开始...
bool m_new_video;
然后只需使用 lambda 作为插槽并让它设置标志并请求 update
...
connect(player, &QMediaPlayer::currentMediaChanged,
[this]()
{
m_new_video = true;
update();
});
您的 videoDisplay::paintEvent
实现可以根据 m_new_video
.