网上很多案例使用qt+vtk的时候用QVTKWidget、QVTKWidget2、QVTKOpenGLWidget、QVTKOpenGLNativeWidget,比较懵逼。
更正 :包含QVTKOpenGLWidget的VTK的第一个版本是VTK 8.0.0!!!
QVTKWidget、QVTKOpenGLWidget、QVTKOpenGLNativeWidget、QVTKWidget2 区别
这几个widget怎么使用
每个widget都提供了不同的功能以及不同的API,但是widget的创建以及使用基本一样。
1)实例化widget
2)指定渲染窗口交互器
3)创建回调函数(qt里就直接绑定信号和槽)
4)创建模型,并与widget关联
5)激活widget
6)反激活widget
这几个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
到底应该用那个widget
放弃使用QVTKWidget。
包含QVTKOpenGLWidget的VTK的第一个版本是VTK 8.0.0!
如果你是Qt5.4以前,请使用QVTKWidget2。
如果你是Qt5.4以后,vtk8.1X及以前 请使用QVTKOpenGLWidget。
如果你是Qt5.4以后,vtk8.2X 请使用QVTKOpenGLNativeWidget。
比如你有QVTKWidget的程序,直接替换成QVTKWidget2(根据版本定),以此向后类推。
为什么自己用时候还要保留vtk8.1X
为什么自己用时候还要保留vtk8.1X,因为vmtk官方说明仅支持vtk8.1X及以前,vtk8.2X不确定。虽然vtk8.2X+vmtk可以使用,但可能有隐藏bug。
如果找不到QVTKOpenGLWidget/QVTKOpenGLNativeWidget
cmake注意下
Qt Design里拖动widget
官方仅提供QVTKWidget,需要手动放到qt design下的plugin里。个人建议放弃在Design里拖动吧,直接拖动QWidget继承一下吧,非要搞也是自己去封装自定义控件。
以上仅个人理解!!!有误请指正。
vtk学习教程
Study-VTK