PCL Qt 中的 addLine 使应用程序崩溃

PCL addLine in Qt crashes application

我正在 Qt 中构建一个 PCL 查看器,并成功复制了在 PCL 站点 (http://pointclouds.org/documentation/tutorials/qt_visualizer.php)

上找到的演示应用程序

我构建了 vtk 5.8 来生成 qvtkWidget。

演示构建并运行良好,所有控件均正常工作并且点绘制正确。现在我需要画其他的东西,球体,线等等

我使用 viewer->addLine() 函数...在 Visual Studio 它工作正常。 但是,在 Qt (4.8.5) 中,每当我尝试做任何其他事情时,它都会终止程序!

QT 中的应用程序输出 window 报告如下

正在启动 C:\xxx\build\release\pcltest.exe... 程序意外结束。 C:\xxx\build\release\pcltest.exe 崩溃

唯一似乎有效的函数是

addPointCloud()
removePointCloud()

以下所有情况都会导致它崩溃

setBackgroundColor()
addCoordinateSystem()
addLine()
addSphere()

有什么想法...?

从Qt可视化教程代码开始;

在UI中添加一个新按钮(pushButton_sphere),然后将信号连接到一个新的成员函数:

connect (ui->pushButton_sphere,  SIGNAL (clicked ()), this, SLOT (sphereButtonPressed ()));

成员函数应该如下所示:

void
PCLViewer::sphereButtonPressed ()
{
  printf ("Sphere button was pressed\n");
  viewer->addSphere(pcl::PointXYZ(0, 0, 0), 1.0);
  viewer->addLine(pcl::PointXYZ(2, 0, 0), pcl::PointXYZ(1, 1, 1));
  viewer->addCube(Eigen::Vector3f(2, 0, 0), Eigen::Quaternionf::Identity(), 1, 1, 1);
  viewer->setBackgroundColor(.2, 0, 0);
  ui->qvtkWidget->update();
}

我已经在 Ubuntu 14.04 + PCL 1.7.2(来自 PPA)+ VTK 5.8 上测试了线条、球体、立方体和背景颜色。如果该代码崩溃,它可能是特定于平台的,所以请调试并 fill a bug on the PCL tracker.

我遇到了完全相同的问题。

从我目前所做的实验来看,如果您在创建 PCLVisualizer 后立即尝试添加多个元素,应用程序似乎会崩溃。

在示例应用程序中,附加元素仅在用户按下按钮后添加。这意味着在创建和添加元素之间既有时间延迟,也有 Qt 应用程序处理事件队列中其他事件的能力。

我还没有深究这个问题,但我的猜测是在创建可视化工具后调用 update() 会导致一些事件被放置在事件队列中。在处理这些内容之前尝试添加更多内容会导致崩溃。

问题出在我的代码中,我需要立即开始添加内容,但我没有任何机制来确定何时这样做是安全的。

确保VTK安装路径已经放在你的全局环境中。由于QT找不到,估计会崩溃