网站域名怎么改,化妆品瓶子怎么做网站,wordpress 改变语言,上海 网站 备案PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口
众所周知#xff0c;在windows下开发PCL点云最快的方式就是到官网下载其预编译好的库#xff0c;比如#xff1a; PCL-1.14.0-AllInOne-msvc2022-win64.exe
这时候你到网络上搜索#xff0c;大概率会有两种方案…PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口
众所周知在windows下开发PCL点云最快的方式就是到官网下载其预编译好的库比如 PCL-1.14.0-AllInOne-msvc2022-win64.exe
这时候你到网络上搜索大概率会有两种方案 1、等PCL创建好窗口后拿到该窗口的句柄使用Qt的API将其嵌入到QWidget中这就是为什么会出现一闪而过的黑窗口的原因 2、重新编译VTK以及PCL库打开Qt支持模块在Qt中将QOpenGLWidget提升为PCLQVTKWidget
喜欢偷懒的程序员怎么可能会去编译源码呢绝不可能那就研究下第一种方案如何解决一闪而过的黑窗口。 按照这种思路思考第一种方案是不是在其创建RenderWindow的时候不显示窗口等其嵌入Qt控件的时候显示就可以了。是的就是这么简单怎么做呢打开格局就可以了格局如下
#include pcl/visualization/pcl_visualizer.h
#include vtkRenderer.h#include QApplication
#include QMainWindow
#include QWindowint main(int argc, char *argv[])
{QApplication a(argc, argv);pcl::visualization::PCLVisualizer::Ptr viewer;// 创建渲染器vtkSmartPointervtkRenderer renderer vtkSmartPointervtkRenderer::New();// 创建渲染窗口vtkSmartPointervtkRenderWindow renderWindow vtkSmartPointervtkRenderWindow::New();// 设置渲染窗口不显示renderWindow-SetShowWindow(false);// 构造PCLVisualizerviewer.reset(new pcl::visualization::PCLVisualizer(renderer, renderWindow, viewer, true));// 将renderWindow的嵌入到QWidget中auto viewerWinId QWindow::fromWinId((WId)renderWindow-GetGenericWindowId());auto widget QWidget::createWindowContainer(viewerWinId, nullptr);widget-show();// 添加点云pcl::PointCloudpcl::PointXYZRGB::Ptr cloud(new pcl::PointCloudpcl::PointXYZRGB);cloud-resize(500);for (auto point : *cloud) {point.x 1024 * rand() / (RAND_MAX 1.0f);point.y 1024 * rand() / (RAND_MAX 1.0f);point.z 1024 * rand() / (RAND_MAX 1.0f);point.r 255 * (1024 * rand() / (RAND_MAX 1.0f));point.g 255 * (1024 * rand() / (RAND_MAX 1.0f));point.b 255 * (1024 * rand() / (RAND_MAX 1.0f));}viewer-addPointCloud(cloud, cloud);return a.exec();
}效果如下