在Qt GUI主窗口中嵌入PCL查看器

5
我正在尝试在Windows 7的64位机器上使用QtCreator开发用户界面。这个用户界面将部署在32位的Windows 7机器上,并将控制一个投影仪和一个相机,用于结构光应用。由于与相机和投影仪API的兼容性等原因,我将使用MS VS 2010 32位编译器。经过几周的努力,我现在遇到了一个小问题。
有没有办法将PCL点云查看器嵌入到我的主Qt GUI窗口中?问题是当我使用PCL查看器时,它会弹出一个单独的窗口。我希望这个窗口被嵌入到我的主窗口中,并且我仍然能够与它交互(旋转、平移、缩放等)。
正如您从我的帖子中所看到的,我是一个新手,对Qt/PCL等一无所知,因此任何最小代码示例都将不胜感激。我已经做了几周的研究,但一直没有找到解决方案,虽然我有一种印象,Qt Widget可能是正确的选择。
2个回答

6
您可以简单地使用PCL的PCLVisualizer,该工具在此处详细描述,并通过QVTKWidget实现。这是我目前正在使用的设置。因此,您最终将进行以下类似的(伪)代码:

在您的头文件中:

class PointCloudWidget : public QVTKWidget
{
    //Whatever comes before (constructor, methods, etc.)

private:

    pcl::visualization::PCLVisualizer m_visualizer;
};

在你的 cpp 文件中:

PointCloudWidget::PointCloudWidget(QWidget *parent) : QVTKWidget(parent)
{
    this->SetRenderWindow(m_visualizer.getRenderWindow());
}

您可以使用可视化工具来实现与PCL查看器相同的功能。

1
这里有更详细的代码:链接 - Fei
这个问题在使用PCL 1.9.1和vtk 8.2时出现了,由于vtkRenderWindow类型不完整而导致失败。这是编译使用的哪些版本? - oarfish
更新:显然,除了 pcl 头文件之外,还必须包含 #include <vtkRenderWindow.h> 才能消除错误。也许 pcl_visualizer.h 头文件只使用前向声明。 - oarfish
请注意,此功能与 VTK >= 9 不兼容。 - oarfish

0
看看我放在这里的最小代码 (PCL Viewer with Qt GUI minimal code)。有一些冗余,但我相信代码非常简单明了。
主要思路是将文件放在一个文件夹中,并从 CMakeLists.txt(Qt cmake 向导)开始项目。
我在项目目录下使用 build 目录。(这很重要,因为在 pclwindow.cpp 中我硬编码了生成文件的路径 #include "build/ui_pclwindow.h"
如果应用程序构建成功,但崩溃了,您可能需要添加一些依赖项(例如 Win 平台上的 dll 文件)。
希望它能给你快速简单的启动!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接