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

时间:2015-12-01 17:31:12

标签: c++ qt point-cloud-library

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

我构建了vtk 5.8来生成qvtkWidget。

该演示构建并运行正常,所有控件都正常工作,并且正确绘制了点。现在我需要绘制其他项目,球体,线条等。

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

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

启动C:\ xxx \ build \ release \ pcltest.exe ... 该计划意外完成。 C:\ xxx \ build \ release \ pcltest.exe崩溃

似乎唯一可行的功能是

addPointCloud()
removePointCloud()

以下所有原因导致其崩溃

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

任何想法......?

3 个答案:

答案 0 :(得分:1)

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

在界面中添加一个新按钮(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

答案 1 :(得分:1)

我遇到了同样的问题。

从我迄今为止所做的实验来看,似乎如果你在创建PCLVisualizer之后尝试添加多个元素,那么应用程序崩溃了。

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

我还没到达底部,但我的猜测是在创建后调用可视化工具上的update()会导致某些事件被放置在事件队列中。尝试在处理这些内容之前添加更多内容会导致崩溃。

问题在于我的代码我需要立即开始添加内容,而我没有机制来确定何时安全。

答案 2 :(得分:0)

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