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?も参照) に表示することはできましたが、このウィジェットをシーンに追加してもビデオにはなりません (見えません)。QGraphicsScene::addItem()を使用できるようにするための QPixMapItem からの多重継承(「このシーンはアイテムの所有権を取得します。」) も役に立ちませんでした。

オブジェクトがシーンの子になると、そのオブジェクトの WId は失われますか? 残念ながら、アイテムのコンストラクターで QImage をロードしても、何も表示されません。さらに調査する必要があります。

編集 1: QWidget および QGraphicsPixmapItem から継承されたクラスは、でテストしたように、ピックスマップを表示できますmyWidget->setPixmap( QPixmap::fromImage( QImage("test.png") ) );。私の以前の画像ローダーは単純に壊れていました。

スケーリングとオフビュー位置を実装する必要があるため、GraphicsView の上にウィジェットを表示するのは難しいですが、これが問題なく動作するとは思えません (かなりの作業だと思います)。

4

1 に答える 1

1

での表示QWidgetQGraphicsScene非常にトリッキーです。詳細については、 QGraphicsProxyWidgetの説明を参照してください。基本的に、表示されるウィジェットは実際のQGraphicsViewウィジェットではありません。描画イベントを基になる invisible にリダイレクトするだけです。どうやら、Qt はビデオのリダイレクトについて何も知らないため、シーンに変換できません。QGraphicsViewQWidget

ウィジェットをシーン内に配置するべきではないと思います。たとえば、グラフィックス ビューの上に配置することを検討してください。

于 2013-06-21T20:05:27.520 に答える