【Y忍冬草】Qt5.8_VTK7.0_VS2015编译配置及测试中问题

最近在做一个基于Qt的三维点云软件,涉及到点云的显示及操作,所以要在Qt中完成QVTKWidget插件的添加。在浮躁的心态下折腾了两天才成功的实现Qt5.8_VTK7.0_VS2015的编译配置及测试。
整个过程中反思和收获并存:
反思:过程过于浮躁,查阅资料时不够耐心!!
收获:新的知识(VTK/CMake/快速提取某一文件夹中文件名等)


以下是整个过程中一些注意事项和测试中遇到的问题:

1.配置
整个配置过程主要参考[dedje]的文章,虽然所用的版本都不一样,但整个过程还是相同的。只是针对下面过程进行一个详细说明。
【Y忍冬草】Qt5.8_VTK7.0_VS2015编译配置及测试中问题_第1张图片
该过程中拷贝的QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib都位于解决方案中的相关目录,我的是D:\Software\Qt\VTK7.0_sln\bin\Release和D:\Software\Qt\VTK7.0_sln\lib\Release。
2.测试中问题
按照[dedje]博友给出的测试代码,测试还是出现问题
【Y忍冬草】Qt5.8_VTK7.0_VS2015编译配置及测试中问题_第2张图片
这里写图片描述
,最终查阅资料发现是因为VS编译的问题。所以需要在代码前添加源文件。
最终测试代码为:

#include "vtkAutoInit.h" 
// 如果编译时编译的是OpenGL2,则下面就改为vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkRenderingOpenGL); // VTK was built with vtkRenderingOpenGL
VTK_MODULE_INIT(vtkInteractionStyle);
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QVTKWidget widget;
	widget.resize(256, 256);
	vtkSmartPointersphereSource = vtkSmartPointer::New();
	sphereSource->Update();
	vtkSmartPointersphereMapper = vtkSmartPointer::New();
	sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
	vtkSmartPointersphereActor = vtkSmartPointer::New();
	sphereActor->SetMapper(sphereMapper);
	vtkSmartPointerrenderWindow = vtkSmartPointer::New();
	vtkSmartPointerrenderer = vtkSmartPointer::New();
	renderWindow->AddRenderer(renderer);
	renderer->AddActor(sphereActor);
	renderer->ResetCamera();
	widget.SetRenderWindow(renderWindow);
	widget.show();
	return a.exec();
}

但紧接着又出现以下问题:(搞死了…)
【Y忍冬草】Qt5.8_VTK7.0_VS2015编译配置及测试中问题_第3张图片
【Y忍冬草】Qt5.8_VTK7.0_VS2015编译配置及测试中问题_第4张图片
对于该问题,只需要到相关VTK7.0的bin文件夹中将相关文件拷贝到运行目录中的Debug文件夹下就可以了。
最终完美实现(o)/
【Y忍冬草】Qt5.8_VTK7.0_VS2015编译配置及测试中问题_第5张图片


对于无法定位程序输入点问题,参考了博友xiao_PuZi。

C++/CLI的程序,用到了OCCI连接数据库,程序编译没问题,一运行就提示:无法定位程序输入点***于动态链接库oraocci12.dll上。
这个时候,需要先确定你的DLL文件已经放到正确的文件夹下,正确的文件位置是:C:\WINDOWS\system32。也有人说64位系统,需要放到C:\WINDOWS\SysWOW64路径下,实测并不需要。
上面的方法不行的话,可以试下:
①、将出问题的dll文件放到程序的Debug或Release文件夹下;
②、将要用的dll文件所在的路径,添加的系统的Path环境变量中。


小知识点
怎样快速提取文件夹中所有文件的名字:
为什么会突然讲到这个小技能,因为发现像VTK这种库在添加依赖项时是一件非常头疼的事情(其依赖项达到上百个),如果一个个输入是非常耗时间的。

  1. 找到VTK依赖项文件夹
    【Y忍冬草】Qt5.8_VTK7.0_VS2015编译配置及测试中问题_第6张图片
    2.在该文件夹下新建一个TXT文档
    如:快速提取文件名.txt,并在该文档中添加一些内容:
    这里写图片描述(注意空格)
    3.将文档后缀名改为“.bat”,确认后直接运行,就会在文件夹中生成了LIST.TXT文档
    【Y忍冬草】Qt5.8_VTK7.0_VS2015编译配置及测试中问题_第7张图片
    可能会生成一些无关文件,只需把相关文件名删除即可。

:中等笨办法,如果有博友有更好的方法,希望可以分享下。


参考
1:http://blog.csdn.net/dedje/article/details/42025143
2:http://blog.csdn.net/xiao_puzi/article/details/69663470
3:https://stackoverflow.com/questions/18642155/no-override-found-for-vtkpolydatamapper
4:http://jingyan.baidu.com/article/d71306350d083913fdf47592.html

你可能感兴趣的:(Qt)