我有一个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;
}
答案 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"));