在 arm 开发板上面, qt4.8.6,通过 usb 取流,然后通过一个 label 去渲染视频,程序跑久了后, update 信号不会触发 paintEvent,是怎么回事?

2018-06-13 09:11:05 +08:00
 wbing
板子不支持 opengles,所以就用 label 去贴了,代码如下

··· c++

void QVideoView::PaintOneFrame(QImage imge)
{

m_mutex.lock();
wb_Image = imge.copy();
m_mutex.unlock();

update(); //调用 update 将执行 paintEvent 函数
}
···

//重写 paintEvent 事件
void QVideoView::paintEvent(QPaintEvent *)
{
QTime time;
time.start(); //开始计时,以 ms 为单位
QPainter painter;
painter.begin(this);
m_mutex.lock();
if (wb_Image.size().width() <= 0)
{
m_mutex.unlock();
return;
}
///将图像按比例缩放成和窗口一样大小
QImage img = wb_Image.scaled(this->size(),Qt::IgnoreAspectRatio);
m_mutex.unlock();
int x = this->width() - img.width();
int y = this->height() - img.height();

painter.drawImage(QPoint(x,y),img); //画出图像
painter.end();

}

连续跑个五六个小时就会出现了,尝试过用 QTimer 去定时调用 update(),但也是一样的情况,有没人能解答下的?
1114 次点击
所在节点    问与答
3 条回复
nybux
2018-06-13 16:52:08 +08:00
你换 repaint 试试
wbing
2018-06-13 17:34:53 +08:00
@nybux 试过了,repaint 会把父窗口也刷白了
nybux
2018-06-13 18:05:31 +08:00
那设置个无效区域呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX