本文最后更新于 269 天前,其中的信息可能已经有所发展或是发生改变。
使用QT中QVTKOpenGLNativeWidget搭配VTK中vtkGenericOpenGLRenderWindow是目前(VTK版本在9.0之上)最简单最好用的方法
QVTKOpenGLNativeWidget可以理解为QT中单独为VTK设计的载体控件,但只适用于VTK9.0及以上版本,QVTKOpenGLNativeWidget继承于QOpenGLWidget,QOpenGLWidget继承于QWidget,所以其使用方法也与其他常用的QWidget相同。
关键就是使用其setRenderWindow()
添加VTK的renderwindow,而要想正确添加,需要VTK使用vtkGenericOpenGLRenderWindow
。
使用示例:
/// .h
#include <vtkGenericOpenGLRenderWindow>
#include <QVTKOpenGLNativeWidget>
#include <QSplitter>
vtkSmartPointer<QVTKOpenGLNativeWidget> m_pcdVtkWidget;
vtkSmartPointer<vtkGenericOpenGLRenderWindow> m_renderWindow;
vtkSmartPointer<QSplitter> m_splitter;
/// .cpp
m_pcdVtkWidget = vtkSmartPointer<QVTKOpenGLNativeWidget>::new();
m_renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::new();
m_renderer = vtkSmartPointer<vtkRenderer>::New();
m_pcdVtkWidget->setRenderWindow(m_renderWindow); // 添加VTK窗口
m_splitter->addWidget(m_pcdVtkWidget); // 即可同其他QWidget一样使用
注意:
-
有些环境需要添加额外设置:
vtkOpenGLRenderWindow::SetGlobalMaximumNumberOfMultiSamples(8); QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat();
-
QVTKOpenGLNativeWidge和QVTKWidget都是旧版的方法,新版可能使用不了
-
vtkGenericOpenGLRenderWindow已有默认的交互方法,不需要额外添加interactor