1.工具:
Qt Creator版本:13.0.2
构建套件版本:Desktop Qt 6.9.0 MSVC2022 64bit
PCL版本:1.13.0
VTK版本:9.2.0
2.概述
虽然AlInOne版本的PCL 1.13.0第三方库中包含VTK,但是其中缺少了Qt相关支持组件,需要自行下载版本兼容的VTK源码并使用Cmake进行编译,编译时需要注意勾选VTK_Group_ENABLE_Qt选项。同时为了QVTKOpenGLNativeWidget类能够正常调用,还需要配置OpenGL并添加openglwidgets模块。
PCL配置参考:Win10 系统下VisualStudio2022 配置点云库 PCL1.13.0_vs2022 pcl 1.11.1-CSDN博客
Qt环境配置VTK参考:windows搭建Qt与VTK_cmake vtk9.2-CSDN博客
Qt环境配置OpenGL参考:OpenGL Qt环境配置_qt+opengl环境配置-CSDN博客
关于添加openglwidgets模块的参考:Qt C++ lnk2019 errors with opengl widget | Qt Forum
3. .pro文件配置
如果库没有正确的连接到项目中可能出现一系列链接错误。
例如:
mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl QVTKOpenGLNativeWidget::setRenderWindow(class vtkRenderWindow *)" (__imp_?setRenderWindow@QVTKOpenGLNativeWidget@@QEAAXPEAVvtkRenderWindow@@@Z),函数 "private: void __cdecl MainWindow::initialvtk(void)" (?initialvtk@MainWindow@@AEAAXXZ) 中引用了该符号
或
bolt.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QOpenGLWidget::QOpenGLWidget(class QWidget *,class QFlags<enum Qt::WindowType>)" (__imp_??0QOpenGLWidget@@QEAA@PEAVQWidget@@V?$QFlags@W4WindowType@Qt@@@@@Z) referenced in function "public: void __cdecl Ui_BOLT::setupUi(class QMainWindow *)" (?setupUi@Ui_BOLT@@QEAAXPEAVQMainWindow@@@Z)
# PCL及第三方库
PCL_ROOT = $$quote(C:/Tools/PCL 1.13.0)
3rdParty_Qhull = $$quote(C:/Tools/PCL 1.13.0/3rdParty/Qhull)
3rdParty_FLANN = $$quote(C:/Tools/PCL 1.13.0/3rdParty/FLANN)
3rdParty_Boost = $$quote(C:/Tools/PCL 1.13.0/3rdParty/Boost)
3rdParty_Eigen = $$quote(C:/Tools/PCL 1.13.0/3rdParty/Eigen)
3rdParty_VTK = $$quote(C:/Tools/PCL 1.13.0/3rdParty/VTK)
OpenNI_ROOT = $$quote(C:/Tools/PCL 1.13.0/3rdParty/OpenNI2)
INCLUDEPATH += \
$$PCL_ROOT/include/pcl-1.13 \
$$3rdParty_Qhull/include \
$$3rdParty_FLANN/include \
$$3rdParty_Boost/include/boost-1_80 \
$$3rdParty_Eigen/eigen3 \
$$3rdParty_VTK/include/vtk-9.2\
$$OpenNI_ROOT/Include
LIBS+= \
-L$$PCL_ROOT/lib \
-L$$3rdParty_Qhull/lib \
-L$$3rdParty_FLANN/lib \
-L$$3rdParty_Boost/lib \
-L$$3rdParty_Eigen/lib \
-L$$3rdParty_VTK/lib \
-L$$OpenNI_ROOT/Lib
LIBS += -lOpenNI2
# Release版本lib
win32:CONFIG(release, debug|release): LIBS += \
-lpcl_common \
-lpcl_features \
-lpcl_filters \
-lpcl_io \
-lpcl_io_ply \
-lpcl_kdtree \
-lpcl_keypoints \
-lpcl_ml \
-lpcl_octree \
-lpcl_outofcore \
-lpcl_people \
-lpcl_recognition \
-lpcl_registration \
-lpcl_sample_consensus \
-lpcl_search \
-lpcl_segmentation \
-lpcl_stereo \
-lpcl_surface \
-lpcl_tracking \
-lpcl_visualization \
-lvtkcgns-9.2 \
-lvtkChartsCore-9.2 \
-lvtkCommonColor-9.2 \
-lvtkCommonComputationalGeometry-9.2 \
-lvtkCommonCore-9.2 \
-lvtkCommonDataModel-9.2 \
-lvtkCommonExecutionModel-9.2 \
-lvtkCommonMath-9.2 \
-lvtkCommonMisc-9.2 \
-lvtkCommonSystem-9.2 \
-lvtkCommonTransforms-9.2 \
-lvtkDICOMParser-9.2 \
-lvtkDomainsChemistry-9.2 \
-lvtkDomainsChemistryOpenGL2-9.2 \
-lvtkdoubleconversion-9.2 \
-lvtkexodusII-9.2 \
-lvtkexpat-9.2 \
-lvtkFiltersAMR-9.2 \
-lvtkFiltersCore-9.2 \
-lvtkFiltersExtraction-9.2 \
-lvtkFiltersFlowPaths-9.2 \
-lvtkFiltersGeneral-9.2 \
-lvtkFiltersGeneric-9.2 \
-lvtkFiltersGeometry-9.2 \
-lvtkFiltersHybrid-9.2 \
-lvtkFiltersHyperTree-9.2 \
-lvtkFiltersImaging-9.2 \
-lvtkFiltersModeling-9.2 \
-lvtkFiltersParallel-9.2 \
-lvtkFiltersParallelImaging-9.2 \
-lvtkFiltersPoints-9.2 \
-lvtkFiltersProgrammable-9.2 \
-lvtkFiltersSelection-9.2 \
-lvtkFiltersSMP-9.2 \
-lvtkFiltersSources-9.2 \
-lvtkFiltersStatistics-9.2 \
-lvtkFiltersTexture-9.2 \
-lvtkFiltersTopology-9.2 \
-lvtkFiltersVerdict-9.2 \
-lvtkfmt-9.2 \
-lvtkfreetype-9.2 \
-lvtkGeovisCore-9.2 \
-lvtkgl2ps-9.2 \
-lvtkglew-9.2 \
-lvtkhdf5-9.2 \
-lvtkhdf5_hl-9.2 \
-lvtkImagingColor-9.2 \
-lvtkImagingCore-9.2 \
-lvtkImagingFourier-9.2 \
-lvtkImagingGeneral-9.2 \
-lvtkImagingHybrid-9.2 \
-lvtkImagingMath-9.2 \
-lvtkImagingMorphological-9.2 \
-lvtkImagingSources-9.2 \
-lvtkImagingStatistics-9.2 \
-lvtkImagingStencil-9.2 \
-lvtkInfovisCore-9.2 \
-lvtkInfovisLayout-9.2 \
-lvtkInteractionImage-9.2 \
-lvtkInteractionStyle-9.2 \
-lvtkInteractionWidgets-9.2 \
-lvtkIOAMR-9.2 \
-lvtkIOAsynchronous-9.2 \
-lvtkIOCesium3DTiles-9.2 \
-lvtkIOCGNSReader-9.2 \
-lvtkIOChemistry-9.2 \
-lvtkIOCityGML-9.2 \
-lvtkIOCONVERGECFD-9.2 \
-lvtkIOCore-9.2 \
-lvtkIOEnSight-9.2 \
-lvtkIOExodus-9.2 \
-lvtkIOExport-9.2 \
-lvtkIOExportGL2PS-9.2 \
-lvtkIOExportPDF-9.2 \
-lvtkIOGeometry-9.2 \
-lvtkIOHDF-9.2 \
-lvtkIOImage-9.2 \
-lvtkIOImport-9.2 \
-lvtkIOInfovis-9.2 \
-lvtkIOIOSS-9.2 \
-lvtkIOLegacy-9.2 \
-lvtkIOLSDyna-9.2 \
-lvtkIOMINC-9.2 \
-lvtkIOMotionFX-9.2 \
-lvtkIOMovie-9.2 \
-lvtkIONetCDF-9.2 \
-lvtkIOOggTheora-9.2 \
-lvtkIOParallel-9.2 \
-lvtkIOParallelXML-9.2 \
-lvtkIOPLY-9.2 \
-lvtkIOSegY-9.2 \
-lvtkIOSQL-9.2 \
-lvtkioss-9.2 \
-lvtkIOTecplotTable-9.2 \
-lvtkIOVeraOut-9.2 \
-lvtkIOVideo-9.2 \
-lvtkIOXML-9.2 \
-lvtkIOXMLParser-9.2 \
-lvtkjpeg-9.2 \
-lvtkjsoncpp-9.2 \
-lvtkkissfft-9.2 \
-lvtklibharu-9.2 \
-lvtklibproj-9.2 \
-lvtklibxml2-9.2 \
-lvtkloguru-9.2 \
-lvtklz4-9.2 \
-lvtklzma-9.2 \
-lvtkmetaio-9.2 \
-lvtknetcdf-9.2 \
-lvtkogg-9.2 \
-lvtkParallelCore-9.2 \
-lvtkParallelDIY-9.2 \
-lvtkpng-9.2 \
-lvtkpugixml-9.2 \
-lvtkRenderingAnnotation-9.2 \
-lvtkRenderingContext2D-9.2 \
-lvtkRenderingContextOpenGL2-9.2 \
-lvtkRenderingCore-9.2 \
-lvtkRenderingFreeType-9.2 \
-lvtkRenderingGL2PSOpenGL2-9.2 \
-lvtkRenderingHyperTreeGrid-9.2 \
-lvtkRenderingImage-9.2 \
-lvtkRenderingLabel-9.2 \
-lvtkRenderingLICOpenGL2-9.2 \
-lvtkRenderingLOD-9.2 \
-lvtkRenderingOpenGL2-9.2 \
-lvtkRenderingSceneGraph-9.2 \
-lvtkRenderingUI-9.2 \
-lvtkRenderingVolume-9.2 \
-lvtkRenderingVolumeOpenGL2-9.2 \
-lvtkRenderingVtkJS-9.2 \
-lvtksqlite-9.2 \
-lvtksys-9.2 \
-lvtkTestingRendering-9.2 \
-lvtktheora-9.2 \
-lvtktiff-9.2 \
-lvtkverdict-9.2 \
-lvtkViewsContext2D-9.2 \
-lvtkViewsCore-9.2 \
-lvtkViewsInfovis-9.2 \
-lvtkWrappingTools-9.2 \
-lvtkzlib-9.2 \
-lvtkGUISupportQt-9.2 \
-lvtkGUISupportQtQuick-9.2 \
-lvtkGUISupportQtSQL-9.2 \
-lvtkRenderingQt-9.2 \
-lvtkViewsQt-9.2
# Debug版本lib
else:win32:CONFIG(debug, debug|release): LIBS += \
-lpcl_commond \
-lpcl_featuresd \
-lpcl_filtersd \
-lpcl_iod \
-lpcl_io_plyd \
-lpcl_kdtreed \
-lpcl_keypointsd \
-lpcl_mld \
-lpcl_octreed \
-lpcl_outofcored \
-lpcl_peopled \
-lpcl_recognitiond \
-lpcl_registrationd \
-lpcl_sample_consensusd \
-lpcl_searchd \
-lpcl_segmentationd \
-lpcl_stereod \
-lpcl_surfaced \
-lpcl_trackingd \
-lpcl_visualizationd \
-lvtkcgns-9.2-gd \
-lvtkChartsCore-9.2-gd \
-lvtkCommonColor-9.2-gd \
-lvtkCommonComputationalGeometry-9.2-gd \
-lvtkCommonCore-9.2-gd \
-lvtkCommonDataModel-9.2-gd \
-lvtkCommonExecutionModel-9.2-gd \
-lvtkCommonMath-9.2-gd \
-lvtkCommonMisc-9.2-gd \
-lvtkCommonSystem-9.2-gd \
-lvtkCommonTransforms-9.2-gd \
-lvtkDICOMParser-9.2-gd \
-lvtkDomainsChemistry-9.2-gd \
-lvtkDomainsChemistryOpenGL2-9.2-gd \
-lvtkdoubleconversion-9.2-gd \
-lvtkexodusII-9.2-gd \
-lvtkexpat-9.2-gd \
-lvtkFiltersAMR-9.2-gd \
-lvtkFiltersCore-9.2-gd \
-lvtkFiltersExtraction-9.2-gd \
-lvtkFiltersFlowPaths-9.2-gd \
-lvtkFiltersGeneral-9.2-gd \
-lvtkFiltersGeneric-9.2-gd \
-lvtkFiltersGeometry-9.2-gd \
-lvtkFiltersHybrid-9.2-gd \
-lvtkFiltersHyperTree-9.2-gd \
-lvtkFiltersImaging-9.2-gd \
-lvtkFiltersModeling-9.2-gd \
-lvtkFiltersParallel-9.2-gd \
-lvtkFiltersParallelImaging-9.2-gd \
-lvtkFiltersPoints-9.2-gd \
-lvtkFiltersProgrammable-9.2-gd \
-lvtkFiltersSelection-9.2-gd \
-lvtkFiltersSMP-9.2-gd \
-lvtkFiltersSources-9.2-gd \
-lvtkFiltersStatistics-9.2-gd \
-lvtkFiltersTexture-9.2-gd \
-lvtkFiltersTopology-9.2-gd \
-lvtkFiltersVerdict-9.2-gd \
-lvtkfmt-9.2-gd \
-lvtkfreetype-9.2-gd \
-lvtkGeovisCore-9.2-gd \
-lvtkgl2ps-9.2-gd \
-lvtkglew-9.2-gd \
-lvtkhdf5-9.2-gd \
-lvtkhdf5_hl-9.2-gd \
-lvtkImagingColor-9.2-gd \
-lvtkImagingCore-9.2-gd \
-lvtkImagingFourier-9.2-gd \
-lvtkImagingGeneral-9.2-gd \
-lvtkImagingHybrid-9.2-gd \
-lvtkImagingMath-9.2-gd \
-lvtkImagingMorphological-9.2-gd \
-lvtkImagingSources-9.2-gd \
-lvtkImagingStatistics-9.2-gd \
-lvtkImagingStencil-9.2-gd \
-lvtkInfovisCore-9.2-gd \
-lvtkInfovisLayout-9.2-gd \
-lvtkInteractionImage-9.2-gd \
-lvtkInteractionStyle-9.2-gd \
-lvtkInteractionWidgets-9.2-gd \
-lvtkIOAMR-9.2-gd \
-lvtkIOAsynchronous-9.2-gd \
-lvtkIOCesium3DTiles-9.2-gd \
-lvtkIOCGNSReader-9.2-gd \
-lvtkIOChemistry-9.2-gd \
-lvtkIOCityGML-9.2-gd \
-lvtkIOCONVERGECFD-9.2-gd \
-lvtkIOCore-9.2-gd \
-lvtkIOEnSight-9.2-gd \
-lvtkIOExodus-9.2-gd \
-lvtkIOExport-9.2-gd \
-lvtkIOExportGL2PS-9.2-gd \
-lvtkIOExportPDF-9.2-gd \
-lvtkIOGeometry-9.2-gd \
-lvtkIOHDF-9.2-gd \
-lvtkIOImage-9.2-gd \
-lvtkIOImport-9.2-gd \
-lvtkIOInfovis-9.2-gd \
-lvtkIOIOSS-9.2-gd \
-lvtkIOLegacy-9.2-gd \
-lvtkIOLSDyna-9.2-gd \
-lvtkIOMINC-9.2-gd \
-lvtkIOMotionFX-9.2-gd \
-lvtkIOMovie-9.2-gd \
-lvtkIONetCDF-9.2-gd \
-lvtkIOOggTheora-9.2-gd \
-lvtkIOParallel-9.2-gd \
-lvtkIOParallelXML-9.2-gd \
-lvtkIOPLY-9.2-gd \
-lvtkIOSegY-9.2-gd \
-lvtkIOSQL-9.2-gd \
-lvtkioss-9.2-gd \
-lvtkIOTecplotTable-9.2-gd \
-lvtkIOVeraOut-9.2-gd \
-lvtkIOVideo-9.2-gd \
-lvtkIOXML-9.2-gd \
-lvtkIOXMLParser-9.2-gd \
-lvtkjpeg-9.2-gd \
-lvtkjsoncpp-9.2-gd \
-lvtkkissfft-9.2-gd \
-lvtklibharu-9.2-gd \
-lvtklibproj-9.2-gd \
-lvtklibxml2-9.2-gd \
-lvtkloguru-9.2-gd \
-lvtklz4-9.2-gd \
-lvtklzma-9.2-gd \
-lvtkmetaio-9.2-gd \
-lvtknetcdf-9.2-gd \
-lvtkogg-9.2-gd \
-lvtkParallelCore-9.2-gd \
-lvtkParallelDIY-9.2-gd \
-lvtkpng-9.2-gd \
-lvtkpugixml-9.2-gd \
-lvtkRenderingAnnotation-9.2-gd \
-lvtkRenderingContext2D-9.2-gd \
-lvtkRenderingContextOpenGL2-9.2-gd \
-lvtkRenderingCore-9.2-gd \
-lvtkRenderingFreeType-9.2-gd \
-lvtkRenderingGL2PSOpenGL2-9.2-gd \
-lvtkRenderingHyperTreeGrid-9.2-gd \
-lvtkRenderingImage-9.2-gd \
-lvtkRenderingLabel-9.2-gd \
-lvtkRenderingLICOpenGL2-9.2-gd \
-lvtkRenderingLOD-9.2-gd \
-lvtkRenderingOpenGL2-9.2-gd \
-lvtkRenderingSceneGraph-9.2-gd \
-lvtkRenderingUI-9.2-gd \
-lvtkRenderingVolume-9.2-gd \
-lvtkRenderingVolumeOpenGL2-9.2-gd \
-lvtkRenderingVtkJS-9.2-gd \
-lvtksqlite-9.2-gd \
-lvtksys-9.2-gd \
-lvtkTestingRendering-9.2-gd \
-lvtktheora-9.2-gd \
-lvtktiff-9.2-gd \
-lvtkverdict-9.2-gd \
-lvtkViewsContext2D-9.2-gd \
-lvtkViewsCore-9.2-gd \
-lvtkViewsInfovis-9.2-gd \
-lvtkWrappingTools-9.2-gd \
-lvtkzlib-9.2-gd \
-lvtkGUISupportQt-9.2 \
-lvtkGUISupportQtQuick-9.2 \
-lvtkGUISupportQtSQL-9.2 \
-lvtkRenderingQt-9.2 \
-lvtkViewsQt-9.2
# opengl glfw
INCLUDEPATH += C:/Tools/OpenGL/glfw/include
DEPENDPATH += C:/Tools/OpenGL/glfw/include
LIBS += -lOpenGL32
LIBS += -LC:/Tools/OpenGL/glfw/lib-vc2022 -lglfw3dll
LIBS += -lglfw3dll\
-lglfw3\
-lglfw3_mt
# opengl glew
INCLUDEPATH += C:/Tools/OpenGL/glew/include
DEPENDPATH += C:/Tools/OpenGL/glew/include
LIBS += -LC:/Tools/OpenGL/glew/lib/Release/Win32
LIBS += -lglew32\
-lglew32s
# opengl glut
INCLUDEPATH += C:/Tools/OpenGL/glut
DEPENDPATH += C:/Tools/OpenGL/glut
LIBS += -LC:/Tools/OpenGL/glut
LIBS += -lglut\
-lglut32
# 添加openglwidgets模块
QT += openglwidgets
以下.lib文件是PCL自带的VTK库中不包含的:
-lvtkGUISupportQt-9.2 \
-lvtkGUISupportQtQuick-9.2 \
-lvtkGUISupportQtSQL-9.2 \
-lvtkRenderingQt-9.2 \
-lvtkViewsQt-9.2
vtkGUISupportQt-9.2.lib
vtkGUISupportQtQuick-9.2.lib
vtkGUISupportQtSQL-9.2.lib
vtkRenderingQt-9.2.lib
vtkViewsQt-9.2.lib