QT+VS+VTK8.2.0使用和配置

一、VTK的环境配置

​ VTK下载地址:Download | VTK,我使用的是VTK8.2.0的版本。

1)若你是windows系统则下载VTK-8.2.0.zip,若是linux,则下载VTK-8.2.0.tar.gz。

2)创建一个文件夹,里面创建5个文件夹,如图所示:

上述文件夹,bin存放编译出来的项目文件,res存放临时文件,src存放VTK源代码也就是压缩包解压出来的东西,debug存放debug生成的文件,release存放release生成的文件。

3)使用CMake编译VTK源码

1、CMake设置如图所示,source code填VTK-res的路径,目标路径填VTK-bin的路径,推荐将Grouped和Advanced都勾选,然后点击configure。

2、点击configure后出现此窗口,选择你电脑上安装好的VS版本的编译器,不然会报错,最好选择x64,其它都默认即可

3、之后会出现很多红色界面,要求我们确定我们的属性设置,注意的点如下:

  • BUILD_SHARED_LIBS 动态编译,勾选上,一般为默认勾选。

  • BUILD_EXAMPLES 是官方示例程序,建议勾上但不是必须。

  • CMAKE_INSTALL_PREFIX 修改为VTK_res的路径

  • VTK_Group_Qt 勾选上。

    之后再点击configure即可

4、这次configure结束之后,还需要确定Qt5_DIR等以Qt_5开头的选项,若Qt环境配置正确的话,这里是默认填好的。

5、再次点击configure之后,就不会出现红色,再点击generate即可

6、上面生成的文件在VTK_bin文件夹中,去VTK_bin文件夹中打开VTK.sln文件

7、右击解决方案里的ALL_BUILD,点击生成,此时就会编译。

8、编译完成之后,工具栏选择Release x64,再右击解决方案内的INSTALL,点击生成。

9、之后vtk_res内就会生成一些文件夹,将他们剪切到VTK_release中,这些就是release版本的VTK库。若要配置debug版本的,只需要将第八步中的release改成debug即可。(tips:若要在Qt中使用VTK插件,注意要配置Release版本才可以正常使用插件)

二、在VS中引入VTK

​ 这里介绍一种比较方便的处理方法,可以不用每次新建项目都要配置解决方案属性。

1、打开一个新项目,在解决方案窗口找到属性管理器

2、由于我们配置的是release版本的VTK,所以我们右击Release | x64,点击添加新项目属性表

3、根据自己喜好命名属性表,设置好位置

4、右击新建的属性表,选择属性

5、在属性页中的VC++目录中的包含目录添加D:\QT\VTK 8.2.0\VTK-release\include\vtk-8.2路径

6、库目录中添加D:\QT\VTK 8.2.0\VTK-release\lib路径

7、在链接器的输入中的附加依赖项添加D:\QT\VTK 8.2.0\VTK_bin\lib\Release路径中的所有.lib后缀的文件名,如图所示

这里有个小技巧,可以在当前的目录中的路径行输入cmd

再在命令行中输入dir /b *.lib>1.txt,按enter,即得到了所有lib类型的文件名。

8、配置好新的属性表之后,每次创建新的项目,只需要将这个属性表加入到项目中,就可以了

​ VS上的VTK环境这样就配置完成了

三、VS中引入Qt

​ 这一部分具体看C++实践之Qt学习(扩展):Visual Studio中Qt开发环境的搭建_vs qt c++开发_努力学习_提高自己的博客-CSDN博客

四、VS上使用VTK

1、配置QVtkWidgetPlugin文件

将D:\QT\VTK 8.2.0\VTK_bin\bin\Release路径中的QVTKWidgetPlugin.dll文件和D:\QT\VTK 8.2.0\VTK_bin\lib\Release路径中的QVTKWidgetPlugin.exp和QVTKWidgetPlugin.lib文件拷贝到D:\QT\Qt5.9\5.9\msvc2017_64\plugins\designer路径中。

2、若前面的VS中引入Qt插件没配置错误的话,新建一个QtWidgetsApplication项目,双击ui界面。

tips:有可能会出现打不开的问题,可以看Qt VS中双击ui文件无法打开的问题_qt无法打开ui文件_cpp_learners的博客-CSDN博客这篇博客。

3、打开后,最下面会出现QVTKWidget插件,将其拖入界面

4、之后要在cpp文件中添加下述代码

#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType)

5、示例代码

QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();
    cylinder->SetHeight(3);
    cylinder->SetRadius(1);
    cylinder->SetResolution(10);//设置柱体横截面的等边多边形的边数

    vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    cylinderMapper->SetInputConnection(cylinder->GetOutputPort());

    vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();
    cylinderActor->SetMapper(cylinderMapper);

    vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
    transform->PostMultiply();//表示使用右乘变换矩阵的方式
    transform->RotateX(90);//表示设置绕Z轴旋转40度
    transform->Translate(-10, 0, 0);//设置平移大小
    cylinderActor->SetUserTransform(transform);

    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkLight> myLight1 = vtkSmartPointer<vtkLight>::New();
    myLight1->SetColor(1, 0, 0);
    myLight1->SetPosition(0, 0, 1);
    myLight1->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
    renderer->AddLight(myLight1);

    vtkSmartPointer<vtkLight> myLight2 = vtkSmartPointer<vtkLight>::New();
    myLight2->SetColor(0, 0, 1);
    myLight2->SetPosition(0, 0, -1);
    myLight2->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
    renderer->AddLight(myLight2);

    renderer->AddActor(cylinderActor);//将vtkprop类型的对象添加到渲染场景中
    renderer->SetBackground(0.1, 0.2, 0.4);//设置R、G、B的格式

    ui.qvtkWidget->GetRenderWindow()->AddRenderer(renderer); //替代vtkRenderWindow
    vtkSmartPointer<vtkRenderWindowInteractor> iren = ui.qvtkWidget->GetRenderWindow()->GetInteractor();
    iren->SetRenderWindow(ui.qvtkWidget->GetRenderWindow());

    //控制相机对物体作旋转、放大、缩小操作
    vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
    iren->SetInteractorStyle(style);

    /*               导入数据,添加变量条等程序                */
    //刷新渲染
    ui.qvtkWidget->GetRenderWindow()->Render();
    //初始化交互器
    iren->Initialize();
    //启动交互器
    iren->Start();
}

6、运行前要记得将编译器设置成Release和x64

7、点击运行

作者:木锦渊

出处:https://www.cnblogs.com/mjyrise/articles/17704846.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   mjy66  阅读(2510)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题