PCL viewer-> spinOnce()使QT应用程序退出

时间:2014-12-16 18:22:46

标签: qt point-cloud-library

我有一个QT C ++应用程序调用非QT函数,该函数在此示例http://pointclouds.org/documentation/tutorials/interactive_icp.php上运行PCL代码库。一切正常,但是当PCL代码完成(PCLVisualizer关闭并返回到QT代码)时,QT应用程序会自动退出。

我已经检查了哪个指令导致了这个错误,结果发现这是对PCLVisualizer::spineOnce()的调用。如果我评论这样的行,则PCL可视化器无法正确显示,但点云操作确实运行正常,并且当计算完成时,QT不会崩溃。

我想知道为什么对PCLVisualizer::spineOnce()的调用导致了这种行为?如果我在PCL代码中调用这样的函数,为什么我的QT应用程序会崩溃?

这是从QT SLOT功能调用PCL功能

void face_processing_GUI::runAlignment()
{
    icp::run_icp(target, source);
}

PCL icp::run_icp(string, string)功能可以像

一样简单
int icp::run_icp(std::string in_target, std::string in_source)
{
    pcl::visualization::PCLVisualizer  * viewer = new  pcl::visualization::PCLVisualizer("ICP stage");
    viewer->spinOnce(); // If I comment this time it does NOT crash
    viewer->close();
    delete viewer;
}

1 个答案:

答案 0 :(得分:0)

问题可能是viewer->close()之后viewer->spinOnce()我不认为它应该像那样运行,spinOnce()方法应该在循环中运行;否则你应该使用spin()。你能试试吗?我没有足够的声誉发表评论。

//Main loop
while ( !viewer->wasStopped())
{
    viewer->spinOnce(100);
    // Comment this line if you don't use another thread to run the visualizer.
    boost::this_thread::sleep (boost::posix_time::microseconds (100000)); 
}

如果使用来自boost库的共享指针创建查看器也可能更好

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));