, если вы не хотите использовать механизм сигнал / слот (который также работает).

а мое приложение вылетает в QWidget :: update (), который работает в потоке без GUI.

Я разрабатываю приложение, в котором получает видеокадры с удаленного хоста и отображает их на QWidget.

Для этого я использую библиотеку libVLC, которая дает мне декодированное изображение. Я получаю изображение в обратном вызове libVLC, которое выполняется в отдельном потоке libVLC. В этом обратном вызове я пытаюсь выполнить метод QWidget :: update (). Иногда происходит сбой приложения, и callstack находится где-то в этом методе. Вот мой код обратного вызова:

//! 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();
}

Я знаю, что операции с графическим интерфейсом вне основного потока не разрешены в Qt. Но в соответствии с документацией QWidget :: update () просто планирует событие рисования для обработки, когда Qt возвращается в основной цикл обработки событий, и не вызывает немедленной перерисовки.

Вопрос: применимо ли правило «Операции с графическим интерфейсом вне основного потока» для QWidget :: update ()? Эта операция относится к «операциям с графическим интерфейсом»?

Я использую Qt 4.7.3, сбой воспроизводится в Windows 7 и Linux.

Ответы на вопрос(1)

Ваш ответ на вопрос