gpt4 book ai didi

c++ - 在 QGraphicsScene 上使用 native 窗口句柄 (HWND) 在 QWidget 中显示来自设备驱动程序的视频

转载 作者:行者123 更新时间:2023-11-28 07:33:15 27 4
gpt4 key购买 nike

这与我之前的问题有关 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 顶部显示小部件会很棘手,因为必须实现缩放和 View 外位置,但我怀疑这是否会出现故障(而且我认为这是相当多的工作) .

最佳答案

QGraphicsScene 中显示 QWidget 非常棘手。参见 QGraphicsProxyWidget描述以获取更多信息。基本上,您在 QGraphicsView 中看到的小部件不是真实小部件。 QGraphicsView 只是将绘制事件重定向到底层不可见的 QWidget。显然,Qt 对您的视频重定向一无所知,因此无法将其转换为场景。

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

关于c++ - 在 QGraphicsScene 上使用 native 窗口句柄 (HWND) 在 QWidget 中显示来自设备驱动程序的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239941/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com