0

这与我之前的问题有关Qt GLWidget in GraphicsScene for fast video display from image data (C++ , Windows)? .

我一直在通过 QGraphicsScene / View 中的 QPixMapItem 转换和显示视频帧,即不使用 OpenGL。转换导致处理器负载,可以通过将所述设备驱动程序直接绘制到窗口来避免,暂时搁置任何缩放问题。

虽然我能够将视频显示到独立的 QWidget->winID() (QWidget、 HWND 、Qt::WA_NativeWindow,另请参阅Using Qt with DirectX?),但将此小部件添加到场景中不会产生视频(它是不可见的)。从 QPixMapItem 多重继承以能够使用QGraphicsScene::addItem()(“此场景获取项目的所有权。”)也没有帮助。

当对象成为场景的孩子时,它会失去它的 WId 吗? 不幸的是,必须关闭其他东西,即使在项目的构造函数中加载 QImage 时,也没有显示任何内容。我将不得不进一步调查。

编辑 1:从 QWidget 和 QGraphicsPixmapItem 继承的类能够显示像素图,如myWidget->setPixmap( QPixmap::fromImage( QImage("test.png") ) );. 我以前的图像加载器根本就坏了。

在 GraphicsView 顶部显示小部件会很棘手,因为必须实现缩放和关闭视图位置,但我怀疑这将不会出现故障(我认为这是一项相当多的工作)。

4

1 回答 1

1

显示QWidgetQGraphicsScene相当棘手的。有关更多信息,请参阅QGraphicsProxyWidget描述。基本上,您看到的小部件QGraphicsView不是真正的小部件。QGraphicsView只是将绘画事件重定向到底层的 invisible QWidget。显然,Qt 对您的视频重定向一无所知,因此无法将其转换为场景。

我认为你不应该把你的小部件放在场景中。例如,考虑将它放在图形视图上方。

于 2013-06-21T20:05:27.520 回答