我正在创建应用程序来分析来自设备的数据并将其显示在屏幕上。处理此设备的 SDK 具有通过设置窗口处理程序 (HWND) 在特定窗口中显示当前数据帧的功能。
在我的 Qt Gui 应用程序中,我试图在视频流上显示我自己的小部件,该小部件显示在我的 QGLWidget 中(它由 winId 函数和 HWND 设置)。MainWidget 是显示数据流的 QGLWidget 的父级,并且 QWidget(或一些图形标记,例如 Circle)应该显示在来自 QGLWidget 的数据流上方。
一切工作几乎完美,但我得到了闪烁效果(闪烁效果?) - 我的圆形小部件正在隐藏并以人眼可以看到的频率显示,我尽量避免它。消除这种情况的唯一选择是将这个圆圈创建为小部件并为其设置 Qt::Popup 标志,因为它有很大的缺点 - 我无法访问其余的界面(我知道,这是 Popup 标志错误)。我尝试了其他选项,例如:
- 设置 Qt::WindowStaysOnTopHint 和其他一些标志,
- 创建父为 QGLWidget 的布局对象,我在其中显示来自设备的数据,然后将圆形小部件设置为布局项,但这里黑色背景是显示数据的阴影(我已经关闭了背景,但我已经意识到Qt 无法知道我的小部件下有什么,因为它是由外部库处理的)。
在文档中,我发现我可以创建自己的 directshow+COM 对象(或接口,对吗?)来处理视频流,但我并不真正了解这种技术,我非常想避免这个选项!
[编辑] 我发现我可以将当前帧数据作为 IPictureDisp 接口,但正如我之前所说,我并不真正了解 COM 技术。我试图找到一些关于如何使用 IPictureDisp 的信息,但我没有关于 COM 技术的基本知识。有没有人有任何关于它的好教程?