У меня есть небольшая структура визуализации, написанная на С++, и я хочу использовать Qt, чтобы иметь правильный графический интерфейс и контролировать свои визуализации для взаимодействия с ними. в настоящее время я использую 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, и все в порядке.
так что теперь моя проблема в том, что я хочу использовать Qt с несколькими окнами (QDialogs
+QGLWidgets
). Я знаком с Qt и уже портировал фреймворк на Qt. но проблема в том, что мне нужно слишком много интегрировать Qt в фреймворк, а это не то, чего я хочу. Я хочу управлять визуализацией с помощью Qt и ее элементов графического интерфейса, но вызов отрисовки для представления должен выполняться моим классом визуализации, как показано в примере GLUT. Таким образом, должен быть способ дать унаследованному QGLWidget
указатель на объект представления, и всякий раз, когда представление должно быть отрисовано, виджет должен вызвать makeCurrent()
, чтобы glCommands мог рисовать в контексте. Я также могу использовать текстуру, в которой мое представление рисует текущую сцену, а затем рисовать текстуру в функции paintGL или glDraw()
функции QGLWidget
, но как я могу сообщить виджету update()
, когда представление ничего об этом не знает. Я буду эмулировать основной цикл с QTimer
, установленным на 0. Все, что я хочу сделать, это иметь возможность запускать рендеринг QGLWidget
внутри моего фреймворка. любое предложение? ссылки? Примеры?