私は c++ で書かれた小さな視覚化フレームワークを持っており、Qt を使用して適切な GUI を使用し、視覚化を制御してそれらとやり取りしたいと考えています。現在、GLUT を使用してウィンドウを作成し、その中にビューを描画しています。したがって、私が行うことはすべて、モデルとビューを保持するというすべてを実行するクラス Visualization のオブジェクトを初期化することです。ビュー自体は、ユーザー入力を処理し、モデルを操作するためのコントローラーを保持します。私のメインループは次のようになります:
Visualization* vis = new Visualization();
vis->createModel("some_file.txt");
vis->createView("unknown");
// ...
void demo_app::display()
{
// clear the framebuffer
glClearColor(0.3, 0.3, 0.3, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
vis.update(); // looks for dirty scenes to update
vis.render(); // draws all views which are stored in vis
glutSwapBuffers();
}
GLUTを使用すると、複数のビューを配置する単一のウィンドウがあります。メイン ループ中にビューを描画するように命令すると、glCommands を実行でき、すべて問題ありません。
だから今私の問題は、いくつかのウィンドウ(QDialogs
+ QGLWidgets
)でQtを使いたいということです。私は Qt に精通しており、既にフレームワークを Qt に移植しています。しかし問題は、フレームワーク内で Qt 統合を行う必要がありすぎて、これは私が望んでいることではありません。Qt とその GUI 要素を使用して視覚化を制御したいのですが、GLUT の例で示されているように、ビューの描画呼び出しは視覚化クラスによって行う必要があります。QGLWidget
そのため、継承されたビュー オブジェクトへのポインターを与える方法が必要であり、ビューを描画する必要があるときはいつでもmakeCurrent()
、glCommands がコンテキストで描画できるようにウィジェットを呼び出す必要があります。また、ビューが現在のシーンをペイントするテクスチャを使用してから、paintGL またはglDraw()
の関数でテクスチャを描画するQGLWidget
こともできますが、ウィジェットに次のように指示するにはどうすればよいですか?update()
ビューがそれについての知識を持っていないとき。0 に設定してメイン ループをエミュレートします。QTimer
やりたいことはQGLWidget
、フレームワーク内からのレンダリングをトリガーできるようにすることだけです。なにか提案を?リンク?例?