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继承一下吧,非要搞也是自己去封装自定义控件。