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

PCL addLine in Qt crashes application

本文关键字:应用程序 崩溃 addLine 中的 PCL Qt      更新时间:2023-10-16

我正在Qt中构建PCL查看器,并已成功复制PCL站点上的演示应用程序(http://pointclouds.org/documentation/tutorials/qt_visualizer.php)

我构建了vtk 5.8来生成qvtkWidget。

该演示构建和运行良好,所有控件都能正常工作,点都画得很好。现在我需要画其他项目,球体,线条等

我使用查看器->addLine()函数。。。在Visual Studio中,它运行良好。然而,在Qt(4.8.5)中,每当我尝试做任何其他事情时,它都会杀死程序!

QT中的应用程序输出窗口报告以下

正在启动C:\xxx\build\release\pltest.exe。。。程序意外地完成了。C: \xxx\build\release\pltest.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 pressedn");
  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上测试了线条、球体、立方体和背景颜色。如果该代码崩溃,它可能是特定于平台的,所以请调试并填充PCL跟踪器上的错误。

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

从我迄今为止所做的实验来看,如果您在创建PCLVisualizer后立即尝试添加多个元素,那么应用程序就会崩溃。

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

我还没有弄清楚这一点,但我的猜测是,在创建观察器后,在观察器上调用update()会导致一些事件被放在事件队列中。在处理这些内容之前尝试添加更多内容会导致崩溃。

问题是在我的代码中,我需要立即开始添加东西,而且我没有机制来确定什么时候这样做是安全的。

确保VTK安装路径已放入全局环境中。由于QT找不到它,它可能会崩溃。