Показывать видео из драйвера устройства в QWidget с дескриптором собственного окна (HWND) на QGraphicsScene

Это связано с моим предыдущим вопросом Qt GLWidget в GraphicsScene для быстрого отображения видео из графических данных (C ++, Windows)?.

Я конвертировал и показывал видеокадры через QPixMapItem в QGraphicsScene / View, то есть не в OpenGL.
Преобразование вызывает загрузку процессора, которой можно было бы избежать, если бы драйверы устройств рисовали прямо в окне, а все проблемы с масштабированием пока остались в стороне.

Хотя я смог показать видео на автономном QWidget-> winID () (QWidget, HWND, Qt :: WA_NativeWindow, также см Использование Qt с DirectX?) добавление этого виджета на сцену не приводит к появлению видео (оно не видно). Множественное наследование от QPixMapItem для возможности использования QGraphicsScene :: AddItem () («Эта сцена берет на себя владение предметом.») Тоже не помогла.

Потеряет ли объект свой WId, когда он становится дочерним элементом сцены?
К сожалению, что-то еще должно быть отключено, даже при загрузке QImage в конструктор элемента ничего не отображается. Мне придется расследовать дальше.

Изменить 1:
Класс, унаследованный от QWidget и QGraphicsPixmapItem, может отображать растровое изображение, как было протестировано с myWidget->setPixmap( QPixmap::fromImage( QImage("test.png") ) );, Мой предыдущий имидж-загрузчик просто сломался.

Показ виджета поверх GraphicsView будет непростым делом, так как потребуется реализовать масштабирование и позиции вне обзора, но я сомневаюсь, что это будет работать без сбоев (и я думаю, что это довольно трудоемкая работа).

0

Решение

Отображение QWidget в QGraphicsScene довольно сложно. Увидеть QGraphicsProxyWidget описание для получения дополнительной информации. По сути, виджет, который вы видите в QGraphicsView не является реальный виджет. QGraphicsView просто перенаправляет события рисования на основной невидимый QWidget, Очевидно, Qt ничего не знает о вашем перенаправлении видео, поэтому он не может перевести его на сцену.

Я думаю, что вы не должны помещать свой виджет в сцену. Например, рассмотрите возможность размещения над графическим представлением.

1

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

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

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