0

QGLWidget をカットすることは可能ですか? つまり、以下のGUIにアクセスできるようにカットしたいということです。奇妙に聞こえるかもしれませんが、QGLWidget を 2 つに分割するのは大変な作業です。私の言いたいことを理解していただければ幸いです。ありがとうございました

4

1 に答える 1

5

以下の「カット」とGUIの意味が完全にはわかりません。レイアウト メカニズムが適切に使用されている Qt では、ウィジェットはそれがカバーする領域を消費し、その下にウィジェットはありません。

複数のビューを単一の QGLWidget にレンダリングしますか? これは、glViewport + glScissorを適切に使用することで簡単に実現できます。


コメントによる編集

ウィンドウには次の 2 種類があります。

  • トップレベル(画面上を自由に移動できるもの)
  • 子ウィンドウ (最上位ウィンドウのウィジェットやペインなどのサブウィンドウ)

子ウィンドウには、次の 2 つの特徴があります。

  • 論理子
  • 実子

論理的な子ウィンドウは、その位置、ディメンション、およびレイヤーのみで構成され、ツールキットによって管理されます。オペレーティング システムから見ると、最上位のウィンドウは 1 つだけです。ツールキットは、その内部状態を管理して、トップレベル ウィンドウに独立した兄弟ウィンドウの印象を与えるものです。

実際の子ウィンドウは、オペレーティング/グラフィック システムによって管理されます。このような実際の子ウィンドウは、グラフィックス コンテキストを親や兄弟と共有する場合があります。ただし、OpenGL コンテキストが作成されるウィンドウに独自のグラフィックス コンテキストがある場合にのみ、OpenGL は適切に機能します。したがって、どの OpenGL 子ウィンドウも必然的に独自のグラフィックス コンテキストとグラフィックス システム ウィンドウ オブジェクトを持ちます。そこにあるほとんどのグラフィックシステムは、子ウィンドウへの形状の適用を適切にサポートしていません (トップレベルのウィンドウのみで、これも OpenGL と競合します)。

したがって、兄弟の上に OpenGL ウィンドウを「レイヤー化」しようとすることは事実上不可能であり、お勧めできません。状況によっては機能する場合もありますが、ほとんどの場合は機能しません。

それは悪いニュースです。

良いニュースは、あなたが少し間違った方向を見ただけだということです。これにより、ビューをQGraphicsViewに向けます。QGraphicsView は OpenGL をバックエンドとしてサポートします。QGraphicsView 内で実行される独自の OpenGL レンダラー コードを記述することもできます。さらに、QGraphicsView はウィジェットのレンダリングにも使用でき、OpenGL も使用できます。したがって、OpenGL レンダリング コードとウィジェットの両方を共通の QGraphicsView シーンに配置するだけで完了です。そして、ここにチュートリアルがあります http://www.crossplatform.ru/node/612チュートリアルの結果は次のようになります。ここに画像の説明を入力

于 2011-08-23T11:39:11.293 に答える