デバイスからのデータを分析して画面に表示するアプリケーションを作成しています。このデバイスを扱う SDK には、ウィンドウ ハンドラ (HWND) を設定することにより、現在のフレーム データを特定のウィンドウに表示する機能があります。
私の Qt Gui アプリケーションでは、ビデオ ストリーム上に独自のウィジェットを表示しようとしています。これは、QGLWidget に表示される DLL です (winId 関数と HWND によって設定されます)。MainWidget は、データ ストリームが表示される QGLWidget の親であり、QWidget (または Circle などのグラフィック マーカー) は、QGLWidget からのデータ ストリームの上に表示する必要があります。
すべてがほぼ完璧に機能しますが、まばたき効果 (きらめき効果?) が発生します - 私のサークル ウィジェットは、人間の目が得ることができる頻度で非表示になり、表示されます。それを排除する唯一のオプションは、このサークルをウィジェットとして作成し、その Qt::Popup フラグに設定することです。これには大きな欠点があります。残りのインターフェイスにアクセスできない (Popup フラグの障害であることはわかっています)。次のような他のオプションを試しました:
- Qt::WindowStaysOnTopHint と他のいくつかのフラグを設定し、
- 親がデバイスからのデータを表示しているQGLWidgetであるレイアウトオブジェクトを作成し、レイアウトのアイテムとして円ウィジェットを設定しますが、ここでは黒い背景が表示データをシェーディングしています(背景もオフにしましたが、気づいたウィジェットは外部ライブラリによって処理されるため、Qt はウィジェットの下にあるものを認識できません)。
ドキュメントで、ビデオ ストリームを処理するために独自の directshow+COM オブジェクト (またはインターフェイス、そうですか?) を作成できるという情報を見つけましたが、私はこのテクノロジをよく知らないので、このオプションをあまり避けたいと思っています。
[編集] データの現在のフレームを IPictureDisp インターフェイスとして取得できることがわかりましたが、前に述べたように、COM テクノロジはよくわかりません。IPictureDisp の操作方法について何かを見つけようとしましたが、COM テクノロジに関する基本的な知識がありません。誰かがそれについての良いチュートリアルを持っていますか?