Usando QWidget :: update () de thread não GUI

s vezes, meu aplicativo trava no QWidget :: update () que está executando em um segmento que não é da GU

stou desenvolvendo um aplicativo no qual recebe quadros de vídeo do host remoto e os exibe no QWidge

Para esse propósito, uso a biblioteca libVLC que fornece uma imagem decodificada. Eu recebo uma imagem no retorno de chamada libVLC, que está executando em um segmento libVLC separado. Neste retorno de chamada, estou tentando executar o método QWidget :: update (). Às vezes, o aplicativo falha e o callstack está em algum lugar nesse método. Aqui está o meu código de retorno de chamada:

//! Called when a video frame is ready to be displayed, according to the vlc clock. 
//! \c picture is the return value from lockCB().

void VideoWidget::displayCB(void* picture)
{
    QImage* image = reinterpret_cast<QImage*>(picture);

    onScreenPixmapMutex_.lock();
    onScreenPixmap_ = QImage(*image);
    onScreenPixmap_.detach();
    onScreenPixmapMutex_.unlock();

    delete image;

    update();
}

Eu sei que operações GUI fora do thread principal não são permitidas no Qt. Mas, de acordo com a documentação, QWidget :: update () apenas agenda um evento de pintura para processamento quando o Qt retorna ao loop do evento principal e não causa uma repintura imediat

A pergunta é: a regra "operações da GUI fora do segmento principal não são permitidas" é aplicável ao QWidget :: update ()? Esta operação pertence a "operações da GUI"?

Eu uso o Qt 4.7.3, a falha é repetida no Windows 7 e Linu

questionAnswers(4)

yourAnswerToTheQuestion