win11下的VS2022+QT6+VTK9.2+PCL1.13.1联合开发环境配置及踩坑记录

准备工作:

**安装VS2022:**这个比较简单,网上随便找个教程就行

安装QT并为VS2022添加QT Creater插件: VS2022配置Qt6_vs2022 qt6-CSDN博客

安装PCL: vs2022配置pcl1.13.1_pcl配置-CSDN博客 安装PCL过程中本身也会安装VTK,但是这个VTK是个丐版,所以就需要下载VTK的源码编译后对PCL中的VTK进行补充

下载CMAKE-gui :(版本最好是最新)不然后面生成boost相关会报错 CMake

下载VTK :在 VTK官网 中下载VTK9.2.0待编译源码,解压后在路径Documentation/dev/bulid.md中可以看到官方提供的Prerequisites以及简易教程

编译VTK9.2:

1、VTK下载完成后解压,然后用Cmake-gui打开;新建个文件夹VTK_QT装生成后的文件,在VTK_QT中新建一个build文件夹作为安装目录

2、点击【Add Entry】按钮添加缓存变量 CMAKE_DEBUG_POSTFIX,类型为 STRING,值设置为 -gd。这样一次性就可以把release和debug分开生成。

3、单击【Configure】进行配置,根据安装的 VS2022 对应版本的生成器,选择 x64 平台。然后开始配置。配置过程中,cmake 会检测当前环境,编译器等,并生成缓存变量。第一次配置完成后,需要对一些缓存变量进行修改。

4、第一次结束后会弹出来一些红色的待确定选项:这里有几个地方要注意:

检查构建lib是否打勾:

安装目录修改成自己想要的(尽量不要默认,默认可能有权限错误):

选中Grouped和Advanced,在搜索窗口中搜索QT,将所有与QT相关的选项设置为WANT,QT版本设置为6,然后点击Configure:

Configure后会出现新的红色区域,这里是让我们选择 Qt6 中各模块的位置:

5、Configuring done 后,如果只有白色界面,代表没有错误。如果你的界面依旧有红色,返回检查以上哪步没有勾选,一直Configure到只有白色界面,最后点击 Generate,完成后打开项目,先把Debug x64打开:

右键解决方案中的ALL_BUILD,生成,完成后再右键INSTALL,生成,生成完毕ALL_BUILD应该是成功200多个,失败0 ,INSTALL是成功100多个,更新100多个,失败0。完成后换成release再重复一遍。

6、完成后在CMake设置的安装目录中找到四个文件夹,复制后替换PCL/3rdparty/VTK中的这4个文件夹,不要覆盖之前的vtk,重名的选择跳过

7、最后,如果不使用CMAKE,就把PCL\3rdParty\VTK\lib目录下新增的与QT相关的lib加到VS的属性里面。如果使用CMAKE,就在PCL安装目录的cmake目录中,打开PCLConfig.cmake,在500行左右找到这个:

用#把原来的注释了,换成(增加Qt的东西):

复制代码
set(PCL_VTK_COMPONENTS "ChartsCore;CommonColor;CommonComputationalGeometry;CommonCore;CommonDataModel;CommonExecutionModel;CommonMath;CommonMisc;CommonTransforms;FiltersCore;FiltersExtraction;FiltersGeneral;FiltersGeometry;FiltersModeling;FiltersSources;ImagingCore;ImagingSources;InteractionImage;InteractionStyle;InteractionWidgets;IOCore;IOGeometry;IOImage;IOLegacy;IOPLY;RenderingAnnotation;RenderingCore;RenderingContext2D;RenderingLOD;RenderingFreeType;ViewsCore;ViewsContext2D;RenderingOpenGL2;RenderingVolumeOpenGL2;GUISupportQt;GUISupportQtQuick;GUISupportQtSQL;RenderingQt;ViewsQt")

使用QVTKOpenGLNativeWidget

配置完成后,打开.ui文件,拖一个Widget,右键选择提升,提升成QVTKOpenGLNativeWidget。

完成后在创建的界面程序的.cpp文件中使用如下函数即可实现在QT界面上显示点云文件:

cpp 复制代码
#include "MainWindow.h"
#include <qpainter.h>
#include <qdebug.h>
#include <pcl/common/io.h>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>
#include <pcl/io/ply_io.h>
#include <vtkRenderWindow.h>
#include <QVTKRenderWidget.h>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkGenericOpenGLRenderWindow.h>//这个必须加

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    pcl::visualization::PCLVisualizer::Ptr viewer;
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
    auto renderer2 = vtkSmartPointer<vtkRenderer>::New();
    auto renderWindow2 = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    renderWindow2->AddRenderer(renderer2);
    viewer.reset(new pcl::visualization::PCLVisualizer(renderer2, renderWindow2, "viewer", false));
    ui->screen->setRenderWindow(viewer->getRenderWindow());
    viewer->setupInteractor(ui->screen->interactor(), ui->screen->renderWindow());
    pcl::io::loadPCDFile(".../xxx.pcd", *cloud);
    viewer->addPointCloud<pcl::PointXYZRGBA>(cloud, "sample cloud");
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
}

MainWindow::~MainWindow()
{
    delete ui;
}

报错解决:

1、无法打开包括文件: "QOpenGLWidget": No such file or directory

检查在Qt的include目录中QOpenGLWidget是否是在include目录下面,我的是在QOpenGLWidgets文件夹下,引入的路径修改为:#include <QOpenGLWidgets/QOpenGLWidget> 即可。

2、无法解析的外部符号QOpenGLWidget::resizeGL(int,int)" (?resizeGL@QOpenGLWidget...

打开项目属性表,选择Qt Project Settings,给Qt Modules添加opengl,给Additional Project Settings添加QT += openglwidgets,解决。

相关推荐
多思考少编码20 分钟前
PAT甲级真题1001 - 1005题详细题解(C++)(个人题解)
c++·python·最短路·pat·算法竞赛
www_comsci1 小时前
【生物EI会议】2026年计算机技术与生物医学国际学术会议(CTBS 2026)
图像处理·神经网络·计算机视觉
极客智造2 小时前
C++ 标准 IO 流全详解:cin /cout/get /getline 原理、用法、区别与避坑
c++·io
charlie1145141912 小时前
嵌入式C++工程实践第20篇:GPIO 输入模式内部电路 —— 芯片是如何“听“到外部信号的
开发语言·c++·stm32·单片机
yong99902 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
chaofan9803 小时前
GPT-5.5 深度评测:15项基准测试全优,视觉理解精度跃升 42%
大数据·人工智能·gpt·计算机视觉·api
样例过了就是过了4 小时前
LeetCode热题100 分割等和子集
数据结构·c++·算法·leetcode·动态规划
麦兜和小可的舅舅4 小时前
ClickHouse 列管理机制解析:从 COW、IColumn 到 CRTP
c++·clickhouse
旖-旎5 小时前
深搜练习(组合)(5)
c++·算法·深度优先·力扣
vegetablesssss5 小时前
vtk镜像图
c++·qt·vtk