我正在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()
任何想法......?
答案 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找不到它,它可能会崩溃。