首页 > 系统相关 >VTK9.3.1在Windows10+VS2022+Qt 5.14.2环境下编译安装以及VTK应用于QT

VTK9.3.1在Windows10+VS2022+Qt 5.14.2环境下编译安装以及VTK应用于QT

时间:2024-10-19 20:46:13浏览次数:8  
标签:Qt VTK VTK9.3 编译 Studio include 9.3

文章目录

概要

本文主要介绍VTK9.3.1如何在Windows10上使用VS2022和QT进行编译安装。

搭建编译环境

  1. 先从VTK官网下载VTK9.3.1的源码,VTK下载地址
    在这里插入图片描述
  2. 我们可以按照官方推荐的编译方式进行编译,首先设置三个文件夹

VTK-9.3.1-src:存放从VTK官方下载的源码
VTK-9.3.1-build:存放使用Cmake编译VTK生成的二进制文件
VTK-9.3.1-release:存放使用Visual Studio生成的lib文件的Release版本

在这里插入图片描述
3.从Cmake官方下载CMake用于编译VTK库,Cmake下载地址
在这里插入图片描述
我的系统是Windows10_X64,所以我选在了第一个,选择哪一个下载根据自己系统决定即可。

编译源代码

打开已经安装的CMake,选在VTK的源码存放路径VTK-9.3.1-src,以及build存放路径VTK-9.3.1-build,然后点击按钮Configure,此时会弹出窗口选择Visual Studio 17 2022,编译x86还是x64可以自己选择。我编译的的x64版本。点击Finish进行编译。
在这里插入图片描述
编译完成后会出现一些红色选项,我们首先需要解决这些红色选项。
在这里插入图片描述
我们可以自己选择VTK库的安装路径,CMAKE_INSTAKK_PREFIX就是VTK库要安装的位置,V通过VTK源码编译完成后生成的库文件所在位置,在这里我把安装路径修改为VTK-9.3.1-release,然后在后续的编译中,生成的VTK就会默认存放在路径VTK-9.3.1-release下。
在这里插入图片描述
最后需要在搜索窗口中搜索Qt,将所有的选项从DEFAULT改为WANT即可。设置完成后点击Configure继续编译。
在这里插入图片描述
Configure编译结束后,仍然会出现红色区域。出现红色区域的原因主要是让我们选择Qt的版本,我们用的版本是5.14.2,所以Qt版本选择5就可以了。即VTK_QT_VERSION为5。
在这里插入图片描述
而Qt的位置,我们只需要在Qt安装成功后,将其加入到环境变量中,那么就会自动检测到Qt的安装路径。
在这里插入图片描述
以上配置完成后,继续点击按钮Configure,编译完成后,如果此时只有白色界面,那么恭喜你,代表编译成功了。然后点击按钮Generate,完成后如果也只有白色界面,代表没有错误。最后点击Open Project就会打开Visual Studio 2022。
在这里插入图片描述
Visual Studio 2022编译并安装VTK
在这里插入图片描述
我编译的是Release x64版本的,右键选择项目ALL_BUILD然后选择生成进行编译。
在这里插入图片描述
可以看出已经编译成功了,接下来我们来生成VTK库文件
在这里插入图片描述
右键点击INSTALL项目,选择生成。此时生成的VTK库文件都存放在VTK-9.3.1-release路径下。
在这里插入图片描述

Visual Studio 2022 + Qt使用VTK

VTK编译成功后,当然是先来试一试能否正常使用了。我是采用VS2022+Qt写了一个测试demo。VS2022如何配置Qt环境可以自行搜索相关教程,这里就不做赘述了。
首先在Qt的窗口界面添加控件openGLWidget,然后右键点击提升为,提升为QVTKOpenGLNativeWidget,界面如下所示:
在这里插入图片描述
在这里插入图片描述
示例代码:

#include "QtVTKDemo.h"

#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCylinderSource.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkRenderer.h>

#include <array>

QtVTKDemo::QtVTKDemo(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

   QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());
   
   vtkNew<vtkNamedColors> colors;
   std::array<unsigned char, 4> bkg = { {26, 51, 102, 255} };
   colors->SetColor("BkgColor", bkg.data());

   vtkNew<vtkCylinderSource> cylinder;
   cylinder->SetResolution(8);

   vtkNew<vtkPolyDataMapper> cylinderMapper;
   cylinderMapper->SetInputConnection(cylinder->GetOutputPort());

   vtkNew<vtkActor> cylinderActor;
   cylinderActor->SetMapper(cylinderMapper);
   cylinderActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());
   cylinderActor->RotateX(30.0);
   cylinderActor->RotateY(-45.0);

   vtkNew<vtkRenderer> renderer;
   renderer->AddActor(cylinderActor);
   renderer->SetBackground(colors->GetColor3d("BkgColor").GetData());
   renderer->ResetCamera();
   renderer->GetActiveCamera()->Zoom(1.5);

   vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
   renderWindow->AddRenderer(renderer);
   ui.openGLWidget->setRenderWindow(renderWindow);
}

效果展示:
在这里插入图片描述
完整代码下载

标签:Qt,VTK,VTK9.3,编译,Studio,include,9.3
From: https://blog.csdn.net/TechNomad/article/details/143068355

相关文章

  • Qt 模态对话框属性
    exec()QDialogdlg(this);dlg.exec();setModal()QDialogdlg(this);dlg.setModal(true); //相当于dlg.setWindowModality(Qt::ApplicationModal);dlg.show();setWindowModality()QDialogdlg(this);dlg.setWindowModality(Qt::ApplicationModal);dlg.show();枚......
  • Qt(信号槽)
    1.概念之前的程序界面只能看,不能交互,信号槽可以让界面进行人机交互。信号槽是Qt在C++基础上新增的特性,类似于其他编程中的回调机制,其目的是实现对象之间的通信。使用信号槽需要具备两个先决条件:通信的对象必须继承自QObjectQObject是Qt所有对象的基类,内部规定了Qt最基......
  • QT/c++相关记录
     QT的大部分容器类(如QString、QVector等)都是使用隐式共享(implicitsharing)技术,这是通过写时复制(copy-on-write,COW)实现的优化模式。理解这一点的关键在于,Qt的容器类需要在对象拷贝时高效处理数据,而隐式共享则允许在栈上操作容器的同时,在需要时共享内部数据的堆上存储。......
  • Learn OpenGL In Qt之纹理
    竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~公众号:C++学习与探索 | 个人主页:rainInSunny | 个人专栏:LearnOpenGLInQt文章目录纹理纹理坐标纹理环绕方式纹理采样多级渐远纹理纹理加载和创建加载纹理创建纹理应用纹理纹理纹理坐标  在前面的......
  • mqtt与云服务器
    mqtt目录mqtt回顾云服务器的操作MQTT协议--将官方库移植到工程--应用--可能会出现的问题:完整代码回顾--昨天我们写的AT指令是直接写在main中,在while循环的外面,没有很好的封装,所以今天我们写一个函数来封装AT指令 //要保证能在while循环中运行uint8_tstate......
  • 【QT】常用控件(二)
    个人主页~常用控件(一)~常用控件三、按钮类控件1、PushButtonwidget.hwidget.cpp2、RadioButton3、CheckBox四、显示类控件1、label三、按钮类控件1、PushButtonQPushButton继承自QAbstractButton,它是所有按钮的父类我们从这个按钮的属性表中可以看到,QPus......
  • canopen 导致qt上位机崩溃的原因分析
    今天开发过程中,在qt中移植canfestival协议栈后,上位机崩溃了,经过我的排查,发现了崩溃的原因。在协议栈中的代码如下UNS32RegisterSetODentryCallBack(CO_Data*d,UNS16wIndex,UNS8bSubindex,ODCallback_tCallback){UNS32errorCode;constindextable*odentry;o......
  • QT实现滑动页面切换
    1.界面实现效果以下是具体的项目需要用到的效果展示。2.简介原理:使用Qt的QPropertyAnimation动画类,这里简单来说就是切换两个界面。这个widget里面可以放很多个待切换的界面,每次切换的时候将当前界面和切换后的界面显示,其他界面都隐藏,然后当前界面移动到主界面之外,下一......
  • 2-STM32F103+ML307(中移4G Cat1)OTA升级篇(自建物联网平台)-STM32通过ML307使用http或
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/myota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明前面......
  • qt页面设计
    1.Designer设计师(掌握)Designer是Qt内置的一款界面设计程序,设计的界面文件为.ui格式。C++程序员通常不会单独启动Designer,如果要在项目中使用Designer程序,只需要在新建项目时,勾选“创建界面文件”选项。这样的项目自带dialog.ui,双击dialog.ui可以直接使用Designer程序......