• 2888阅读
  • 2回复

[提问]关于update后没有调用paintevent的问题 [复制链接]

上一主题 下一主题
离线lijiebit
 

只看楼主 倒序阅读 楼主  发表于: 2017-09-22

VLCPlayer继承自QWidget,用于播放视频,视频解码一帧后调用updatePicture函数执行update


然后应该执行paintEvent函数,但是程序运行一段时间会无法执行paintEvent函数,导致VLCPlayer无法刷新

如果将程序最小化再最大化就可以刷新,但无法连续刷新,不知道为什么,我用QT5.7.0


void *VLCPlayer::lock(void *op, void **plane)
{
    TCallbackParam *p = (TCallbackParam *)op;
    p->mutex.lock();
    *plane = p->pixels;

    return NULL;

}

void VLCPlayer::unlock(void *op, void *pic, void * const *plane)
{
    TCallbackParam *p = (TCallbackParam *)op;
    uchar *pp = (uchar *)*plane;
    unsigned char *data = (unsigned char *)*plane;
    QImage a(data, p->width, p->height, QImage::Format_RGBA8888);
    p->mutex.unlock();
    p->wnd->updatePicture(a);
}
void VLCPlayer::display(void *op, void *pic)
{
    //    (void)op;
}
void VLCPlayer::updatePicture(const QImage& imageSrc)
{
   this->image = imageSrc;
    update();
}

void VLCPlayer::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
  painter.drawImage(this->rect(), image);
}
离线fu22507411

只看该作者 1楼 发表于: 2017-09-22
repaint试试
邮箱jiahao_coffee@foxmail.com 有问题可以免费咨询,有空都会回答,不过太难了我答不上来不要介意哈
离线lijiebit

只看该作者 2楼 发表于: 2017-09-23
repaint也许是正确的,update是postevent,repaint是sendevent,

在没有调用paintevent的时候,我单步调试进入update,跟踪代码发现调用了postevent,可就是不执行paintevent,很奇怪,主要还是想知道为什么,
快速回复
限100 字节
 
上一个 下一个