Skip to content

vtk各渲染窗口区别

网上很多案例使用qt+vtk的时候用QVTKWidget、QVTKWidget2、QVTKOpenGLWidget、QVTKOpenGLNativeWidget,比较懵逼。

更正 :包含QVTKOpenGLWidget的VTK的第一个版本是VTK 8.0.0!!!


1 这几个widget怎么使用

每个widget都提供了不同的功能以及不同的API,但是widget的创建以及使用基本一样。
1)实例化widget
2)指定渲染窗口交互器
3)创建回调函数(qt里就直接绑定信号和槽)
4)创建模型,并与widget关联
5)激活widget
6)反激活widget

2 这几个widget的关系

这里梳理下他们的关系(仅是个人理解)。

介绍
QVTKWidget 用来在Qt的QWidget中显示 vtkRenderWindow
QVTKWidget2 用来在Qt的QGLWidget中显示 vtkRenderWindow
QVTKOpenGLWidget 用来在Qt的QWidget中显示 vtkRenderWindow
QVTKOpenGLNativeWidget 用来在Qt的QOpenGLWidget中显示 vtkGenericOpenGLRenderWindow

QGLWidget、QOpenGLWidget类均继承自QWidget用于渲染OpenGL图形。
QVTKWidget2比QVTKWidget渲染快、效果好,使用基本一样。
QVTKOpenGLNativeWidget比QVTKOpenGLWidget渲染快、效果好,使用基本一样。
QVTKOpenGLWidget比QVTKWidget渲染快、效果好,使用基本一样。
QVTKOpenGLNativeWidget比QVTKWidget2渲染快、效果好,使用基本一样。

版本分割线一:Qt版本

Qt5.4以后版本官方建议使用QOpenGLWidget,但QGLWidget保留了下来。
Qt5.4以前版本请使用QGLWidget。
这导致vtkWidget这边应该这样使用:
Qt5.4以后版本使用QVTKOpenGLWidget/QVTKOpenGLWidget。
Qt5.4以前版本请使用QVTKWidget2/QVTKWidget。

版本分割线二:Vtk版本

vtk 8.1.X及以前 没有QVTKOpenGLNativeWidget
vtk 8.2.X 增加QVTKOpenGLNativeWidget

3 到底应该用那个widget

放弃使用QVTKWidget。
包含QVTKOpenGLWidget的VTK的第一个版本是VTK 8.0.0!
如果你是Qt5.4以前,请使用QVTKWidget2。
如果你是Qt5.4以后,vtk8.1X及以前 请使用QVTKOpenGLWidget。
如果你是Qt5.4以后,vtk8.2X 请使用QVTKOpenGLNativeWidget。

比如你有QVTKWidget的程序,直接替换成QVTKWidget2(根据版本定),以此向后类推。

4 为什么自己用时候还要保留vtk8.1X

为什么自己用时候还要保留vtk8.1X,因为vmtk官方说明仅支持vtk8.1X及以前,vtk8.2X不确定。
虽然vtk8.2X+vmtk可以使用,但可能有隐藏bug。

5 找不到QVTKOpenGLWidget/QVTKOpenGLNativeWidget

cmake 注意下

6 Qt Design里拖动widget

官方仅提供QVTKWidget,需要手动放到qt design下的plugin里。
个人建议放弃在Design里拖动吧,直接拖动QWidget继承一下吧,非要搞也是自己去封装自定义控件。