Это связано с моим предыдущим вопросом 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 будет непростым делом, так как потребуется реализовать масштабирование и позиции вне обзора, но я сомневаюсь, что это будет работать без сбоев (и я думаю, что это довольно трудоемкая работа).
Отображение QWidget
в QGraphicsScene
довольно сложно. Увидеть QGraphicsProxyWidget описание для получения дополнительной информации. По сути, виджет, который вы видите в QGraphicsView
не является реальный виджет. QGraphicsView
просто перенаправляет события рисования на основной невидимый QWidget
, Очевидно, Qt ничего не знает о вашем перенаправлении видео, поэтому он не может перевести его на сцену.
Я думаю, что вы не должны помещать свой виджет в сцену. Например, рассмотрите возможность размещения над графическим представлением.
Других решений пока нет …