参考教学东灵工作室的教程http://blog.csdn.net/www_doling_net/article/details/8668870
但是遇到了一些问题
1、头文件中的onOpenSlot()编译出错,类似于这样的错误
vtkRendering.lib(vtkOpenGLGlyph3DMapper.obj) : error LNK2019: 无法解析的外部符号 __imp_glCallList,该符号在函数 "public: virtual void __cdecl vtkOpenGLGlyph3DMapper::Render(class vtkRenderer *,class vtkActor *)" (?Render@vtkOpenGLGlyph3DMapper@@UEAAXPEAVvtkRenderer@@PEAVvtkActor@@@Z) 中被引用
1>vtkRendering.lib(vtkOpenGLDisplayListPainter.obj) : error LNK2001: 无法解析的外部符号 __imp_glCallList
发现是因为没有定义onOpenSlot()这个函数,只是在头文件中的类进行了声明,在cpp中定义一个它的空函数编译就可以通过了(当然后面是要定义它的,用来实现功能)
2、m_QVTKWidget报错找不到,是因为要去QT的ui文件中设置,这个名字是QVTKWidge空间的名字,在QTDesigner进行设置(或者找到相应的文件直接更改),若改了之后还会有报错,重启项目再试试就可以了,但要确保修改的是正确的对象。
3、编译通过,但读取图片的时候出错了,报错:vtkTrivialProducer :This data object does not contain the requested extent.
原因是用高版本的vtk(我的是6.1)需要在reader->setinputdata后添加一句reader->update();就可以读取图片了
//用vtkJPEGReader读取JPG图像
vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName(fileName_str);
reader->Update();//要加update()这个函数,否则会报错!
4、编译通过之后执行时发生内存泄露之类的错误,回跳到mapper之类的语句中,原因我也不知道,可能是版本问题
在头部加入
#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)
即可
程序截图