Qt5.8_VTK7.0_VS2015编译配置及测试中问题

来源:互联网 发布:淘宝客服刚去要学什么 编辑:程序博客网 时间:2024/06/05 12:40

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


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

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

#include "vtkAutoInit.h" // 如果编译时编译的是OpenGL2,则下面就改为vtkRenderingOpenGL2VTK_MODULE_INIT(vtkRenderingOpenGL); // VTK was built with vtkRenderingOpenGLVTK_MODULE_INIT(vtkInteractionStyle);#include <QtWidgets/QApplication>#include <vtkSmartPointer.h>#include <vtkSphereSource.h>#include <vtkPolyDataMapper.h>#include <vtkActor.h>#include <vtkImageViewer.h>#include <vtkRenderWindowInteractor.h>#include <vtkInteractorStyleImage.h>#include <vtkJPEGReader.h>#include <vtkRenderer.h>#include <QVTKWidget.h>int main(int argc, char *argv[]){    QApplication a(argc, argv);    QVTKWidget widget;    widget.resize(256, 256);    vtkSmartPointer<vtkSphereSource>sphereSource = vtkSmartPointer<vtkSphereSource>::New();    sphereSource->Update();    vtkSmartPointer<vtkPolyDataMapper>sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();    sphereMapper->SetInputConnection(sphereSource->GetOutputPort());    vtkSmartPointer<vtkActor>sphereActor = vtkSmartPointer<vtkActor>::New();    sphereActor->SetMapper(sphereMapper);    vtkSmartPointer<vtkRenderWindow>renderWindow = vtkSmartPointer<vtkRenderWindow>::New();    vtkSmartPointer<vtkRenderer>renderer = vtkSmartPointer<vtkRenderer>::New();    renderWindow->AddRenderer(renderer);    renderer->AddActor(sphereActor);    renderer->ResetCamera();    widget.SetRenderWindow(renderWindow);    widget.show();    return a.exec();}

但紧接着又出现以下问题:(搞死了…..)
这里写图片描述
这里写图片描述
对于该问题,只需要到相关VTK7.0的bin文件夹中将相关文件拷贝到运行目录中的Debug文件夹下就可以了。
最终完美实现(^o^)/
这里写图片描述


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

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


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

  1. 找到VTK依赖项文件夹
    这里写图片描述
    2.在该文件夹下新建一个TXT文档
    如:快速提取文件名.txt,并在该文档中添加一些内容:
    这里写图片描述(注意空格)
    3.将文档后缀名改为“.bat”,确认后直接运行,就会在文件夹中生成了LIST.TXT文档
    这里写图片描述
    可能会生成一些无关文件,只需把相关文件名删除即可。

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


参考
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