在QGraphicsScene上显示来自设备驱动程序的QWidget与本地窗口句柄(HWND)



这与我之前的问题GraphicsScene中的Qt GLWidget有关,用于从图像数据(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上显示小部件将是棘手的,因为缩放和离视图位置将不得不实现,但我怀疑这将无故障地工作(我认为这是相当多的工作)

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

我认为你不应该把你的小部件在场景。例如,考虑将其置于图形视图之上。

最新更新