私はこの問題に取り組み、もっとうまくやれることを知っていました。
問題:
QGLWidget (Qt OpenGL contextview) を Qt ウィジェットでオーバーレイすると、Qt は Qt フレームごとにこれらのウィジェットを再描画します。
Qt は、60 fps 以上で常にウィンドウ全体を再描画するように構築されていないため、非常に遅くなります。
私の考え:
Qt に別のものを使用して描画させます: 透明なテクスチャです。再描画するたびに OpenGL でこのテクスチャを使用し、他のすべての上に描画します。Qt が OpenGL コンテキスト ビューとのすべてのやり取りを、テクスチャに描画されたウィジェットにリダイレクトするようにします。
利点は、Qt が必要なときに再描画するだけでよく (たとえば、ウィジェットをホバーまたはクリックしたり、テキスト フィールド内のテキスト カーソルを点滅させたり)、部分的な再描画をより高速に実行できることです。
私の質問:
これにアプローチする方法は?テクスチャに描画するように Qt に指示するにはどうすればよいですか? ウィジェットとのやり取りを別のウィジェットにリダイレクトするにはどうすればよいですか (たとえば、コンテキスト ビューでテクスチャ描画ウィジェット内のチェックボックスがある領域の上にマウスを移動すると、Qt はこのイベントをチェックボックスに登録し、反映するように再描画する必要があります)。かぶせた状態)