Qt5 наложение виджетов на собственный виджет окна

В приложении, которое я пишу для Linux, у меня есть QWidget, поддерживаемый собственным окном (видео, отображаемое с помощью libmpv), на которое я хочу наложить другой (прозрачный) QWidget, который будет использоваться для рисования поверх видео.

Я попытался поместить их оба в содержащий QWidget с помощью QStackedLayout (используя режим StackAll), однако это приводит к тому, что обновления содержимого собственного окна не отражаются в приложении, даже если я установил Qt :: WA_NativeWindow на содержащем виджет, чтобы контейнер и все его дочерние элементы (оверлей и виджет видео) создаются как собственные окна.

Собственное окно корректно обновляется, если виджет наложения отсутствует, поэтому с этой целью проблем нет. Сам виджет наложения также не имеет проблем, так как он отображается только частично, как и ожидалось, покрывая область виджета видео.

В прошлом я писал нечто подобное с помощью Gtk +, где я решил это с помощью gdk_window_set_composited, что заставляет видео-виджет отображаться вне экрана, а родительский виджет уведомляется всякий раз, когда дочерний объект обновляется, чтобы он мог обрабатывать рисование дочернего содержимого самостоятельно. Тем не менее, я не смог найти что-либо равноправное в Qt, поэтому я не знаю, как этого добиться.

Использование QOpenGLWidget не вариант, поскольку у libmpv есть проблемы, когда рендеринг видео замедляется до сканирования, если текущее рабочее пространство переключается во время воспроизведения.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]