您的位置:首页 > 编程语言 > Qt开发

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

2017-08-24 14:23 573 查看
最近在做一个基于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,则下面就改为vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkRenderingOpenGL); // VTK was built with vtkRenderingOpenGL
VTK_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这种库在添加依赖项时是一件非常头疼的事情(其依赖项达到上百个),如果一个个输入是非常耗时间的。

找到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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vtk 三维 qt5