在 Qt 界面上显示点云

要在 Qt 的 GUI 界面上显示点云, 需要首先放置一个 QVTKWidget 控件, 然后通过 C++ 代码往该控件上显示点云.
但一般直接下载安装的 PCL 预编译的 3rdParty/VTK 没有该控件, 需要自己下载源码重新编译.

  • Visual Studio 2017
  • Qt 5.12.10
  • PCL 1.8.1
  • VTK 8.0.0

下载编译 VTK

下载的 VTK 版本必须和原来 PCL 预编译的版本一致.

  1. 首先将 PCL 自带的 VTK 包 %PCL_ROOT%/3rdParty/VTK 重命名为 %PCL_ROOT%/3rdParty/VTK-bak 作为备份;

  2. 下载 vtk-v8.0.0 - gitlab 的源码并解压到...unpack_path/vtk-v8.0.0;

  3. 打开 CMake-Gui, 设置

    • Where is the source code: ...unpack_path/vtk-v8.0.0
    • Where to build the binaries: ...unpack_path/vtk-v8.0.0/build;
  4. 点击Add Entry, 添加CMAKE_DEBUG_POSTFIX, 类型为STRING, 其值设置为-gd. 这样 debug 模式编译出的库文件名会带一个-gd, 以便与 Release 模式的库文件进行区分;

  5. 点击Configure: Visual studio 15 2017 Win64, x64.

  6. 上一步 Configure 完成后, 更改 CMake 的配置:

    • BUILD_SHARED_LIBS
    • BUILD_TESTING
    • BUILD_EXAMPLES
    • VTK_GROUP_QT
    • VTK_RENDERING_BACKEND: OpenGL2
    • CMAKE_INSTALL_PREFIX: %PCL_ROOT%/3rdParty/VTK.
  7. 点击 configure, 若出现错误, 将VTK_QT_VERSION 设为 5, 再 Configure.

  8. 修改如下配置后继续 Configure:

    • QT_QMAKE_EXECUTABLE: D:/Qt/Qt5.12.10/5.12.10/msvc2017_64/bin/qmake.exe
    • VTK_QT_VERSION: 5
    • Qt5_DIR: D:/Qt/Qt5.12.10/5.12.10/msvc2017_64/lib/cmake/Qt5
    • Qt5Core_DIR: D:/Qt/Qt5.12.10/5.12.10/msvc2017_64/lib/cmake/Qt5Core
    • Qt5Gui_DIR: D:/Qt/Qt5.12.10/5.12.10/msvc2017_64/lib/cmake/Qt5Gui
    • Qt5OpenGL_DIR: D:/Qt/Qt5.12.10/5.12.10/msvc2017_64/lib/cmake/Qt5OpenGL
    • Qt5Sql_DIR: D:/Qt/Qt5.12.10/5.12.10/msvc2017_64/lib/cmake/Qt5Sql
    • Qt5UiPlugin_DIR: D:/Qt/Qt5.12.10/5.12.10/msvc2017_64/lib/cmake/Qt5UiPlugin
    • Qt5Widgets_DIR: D:/Qt/Qt5.12.10/5.12.10/msvc2017_64/lib/cmake/Qt5Widgets
  9. 如无错误(可能有 CMake Deprecation Warning, 不重要的话就不理它), 点击Generate, 然后Open Project, 通过 VS 打开.

  10. 在 VS 中点击 生成 -> 批生成: 勾选 ALL_BUILD,Debug,x64,ALL_BUILD,Release,x64,INSTALL,Debug,x64,INSTALL,Release,x64, 点击生成, 等待…

  11. 在 Powershell 查看之前备份的预编译的 VTK 与新生成的 VTK 库文件:

    1
    2
    PS D:\PCL\3rdParty> tree /f /a VTK >> VTK.txt
    PS D:\PCL\3rdParty> tree /f /a VTK-bak >> VTK-bak.txt

    用在线文本比对网站 https://www.diffchecker.com/diff 对比分析两个库文件, 发现自己编译的库比安装 PCL 时预编译的库多了大量 VTK/bin/*.dll, 以及部分头文件(.h) 和静态库文件(.lib). 因此在配置 PCL 的时候要注意把 VTK 配置好.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    vtkGUISupportQtOpenGL-8.0.lib
    vtkGUISupportQtSQL-8.0.lib
    vtkGUISupportQt-8.0.lib
    vtkRenderingGL2PS-8.0.lib
    vtkViewsQt-8.0.lib
    vtkRenderingVolumeOpenGL-8.0.lib
    vtkRenderingQt-8.0.lib
    vtkRenderingOpenGL-8.0.lib
    vtkRenderingLIC-8.0.lib
  12. 把编译得到的 D:\PCL\3rdParty\VTK\plugins\designer\QVTKWidgetPlugin.dll 复制到 Qt 安装路径下D:\Qt\Qt5.12.10\5.12.10\msvc2017_64\plugins\designer\QVTKWidgetPlugin.dll, 注意这里只要 Release 版本即可, 不要放置 debug 版本的 dll.

例程

  1. Qt Designer 打开 ui 文件, 在 ui 界面拖拽放置一个 qvtkWidget 控件, 并在菜单工具栏添加 File->Open. 编译完成后可以通过 Open 打开点云*.pcd 文件并在界面上显示.
1
2
3
> mkdir build
> cd build
> cmake .. -A x64 -T v141 -DQt5_DIR=D:/ProgramFiles/Qt5.12.10/5.12.10/msvc2017_64/lib/cmake/Qt5

Refer

在 Qt 界面上显示点云

https://luosiyou.cn/blogs/vs_qt_pcl/

作者

Luo Siyou

发布于

2023-01-03

更新于

2023-05-01

许可协议