Используя QVTKWidget и QOpenGLWidget в одном интерфейсе?
Я работаю над проектом, который использует собственный подклассQOpenGLWidget
отображать некоторые визуализации. В концеpaintGL()
метод вызывает виджетupdate()
метод для запуска события перерисовки, если он виден. Теперь я хочу добавить дополнительныйQVTKWidget
на мой пользовательский интерфейс, и я делаю это, используя что-то вроде этого:
QVBoxLayout* layout = findChild<QVBoxLayout*>("layout_simulation");
QVTKWidget* widget = new QVTKWidget();
// Setup arrow
vtkSmartPointer<vtkArrowSource> arrowSource = vtkSmartPointer<vtkArrowSource>::New();
[more VTK stuff...]
widget->GetRenderWindow()->AddRenderer(renderer);
renderer->AddActor(arrowActor);
renderer->ResetCamera();
// Add widget to ui
layout->addWidget(widget);
Виджет VTK добавлен в пользовательский интерфейс и работает так, как задумано. Проблема в том, что как только я используюlayout->addWidget()
методвсе мои другиеQOpenGLWidget
объекты становятся черными и ничего не отображать. Также этот черный не цвет фонаVTKRenderer
потому что другие виджеты все еще черные, даже если я изменю цвет фона виджета VTK. Я проверил иpaintGL()
по-прежнему вызывается в цикле, но ничего не отображается. Я почти уверен, что я не использовал плохой код OpenGL в своем подклассе виджетов, поэтому я думаю, что это как-то связано с внутренней инициализациейQOpenGLWidget
а такжеQVTKWidget
, То же самое происходит, если я опускаю все вызовы VTK и просто добавляю только что созданныйQVTKWidget
.
Самое смешное, что если я опущуlayout->addWidget()
вызов VTK открывает рендерер в отдельном окне, и все виджеты OpenGL работают без проблем. Но, конечно же, я хочу встроить рендер в мой интерфейс.
У кого-нибудь есть опыт с этим, или вы знаете какие-либо подводные камни, с которыми я мог бы столкнуться, или есть какие-то общие проблемы, которые могут вызвать это?
Кстати, я использую основной профиль OpenGL 3.3 с пользовательскими шейдерами дляQOpenGLWidget
подкласс.
РЕДАКТИРОВАТЬ: я удалил свой запрос для профиля ядра 3.3, и теперь он использует профиль совместимости 4.4. Я думаю, что теперь он использует тот же профиль, что иVTKRenderer
так что это может быть исключено как источник ошибки.