PCL Qt 中的 addLine 使应用程序崩溃
PCL addLine in Qt crashes application
我正在 Qt 中构建一个 PCL 查看器,并成功复制了在 PCL 站点 (http://pointclouds.org/documentation/tutorials/qt_visualizer.php)
上找到的演示应用程序
我构建了 vtk 5.8 来生成 qvtkWidget。
演示构建并运行良好,所有控件均正常工作并且点绘制正确。现在我需要画其他的东西,球体,线等等
我使用 viewer->addLine() 函数...在 Visual Studio 它工作正常。
但是,在 Qt (4.8.5) 中,每当我尝试做任何其他事情时,它都会终止程序!
QT 中的应用程序输出 window 报告如下
正在启动 C:\xxx\build\release\pcltest.exe...
程序意外结束。
C:\xxx\build\release\pcltest.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 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.
我遇到了完全相同的问题。
从我目前所做的实验来看,如果您在创建 PCLVisualizer 后立即尝试添加多个元素,应用程序似乎会崩溃。
在示例应用程序中,附加元素仅在用户按下按钮后添加。这意味着在创建和添加元素之间既有时间延迟,也有 Qt 应用程序处理事件队列中其他事件的能力。
我还没有深究这个问题,但我的猜测是在创建可视化工具后调用 update() 会导致一些事件被放置在事件队列中。在处理这些内容之前尝试添加更多内容会导致崩溃。
问题出在我的代码中,我需要立即开始添加内容,但我没有任何机制来确定何时这样做是安全的。
确保VTK安装路径已经放在你的全局环境中。由于QT找不到,估计会崩溃
我正在 Qt 中构建一个 PCL 查看器,并成功复制了在 PCL 站点 (http://pointclouds.org/documentation/tutorials/qt_visualizer.php)
上找到的演示应用程序我构建了 vtk 5.8 来生成 qvtkWidget。
演示构建并运行良好,所有控件均正常工作并且点绘制正确。现在我需要画其他的东西,球体,线等等
我使用 viewer->addLine() 函数...在 Visual Studio 它工作正常。 但是,在 Qt (4.8.5) 中,每当我尝试做任何其他事情时,它都会终止程序!
QT 中的应用程序输出 window 报告如下
正在启动 C:\xxx\build\release\pcltest.exe... 程序意外结束。 C:\xxx\build\release\pcltest.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 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.
我遇到了完全相同的问题。
从我目前所做的实验来看,如果您在创建 PCLVisualizer 后立即尝试添加多个元素,应用程序似乎会崩溃。
在示例应用程序中,附加元素仅在用户按下按钮后添加。这意味着在创建和添加元素之间既有时间延迟,也有 Qt 应用程序处理事件队列中其他事件的能力。
我还没有深究这个问题,但我的猜测是在创建可视化工具后调用 update() 会导致一些事件被放置在事件队列中。在处理这些内容之前尝试添加更多内容会导致崩溃。
问题出在我的代码中,我需要立即开始添加内容,但我没有任何机制来确定何时这样做是安全的。
确保VTK安装路径已经放在你的全局环境中。由于QT找不到,估计会崩溃