点云在qt的QVTKOpenGLNativeWidget控件上显示

显示代码1

这里用一段代码把这个事情讲清楚,逻辑清晰,方便自己后期看

1,点云的读取

2,pcl的pclvisualizer的显示设置

这两步是自由的,只要动pcl就可以实现,不会在deepseek上到处都能找到pclvisualizer的使用

3,vtk部分是固定结构。甚至可以封装起来。通过一个函数传入一个pclvisualizer指针,和一个ui控件,完成显示

3.1:

1,创建新的vtkrenderwindow,并将pclvisualizer的渲染器绑定到vtk的渲染窗口上

2,将新的vtkrenderwindow绑定到ui的控件上

3.2,将pcl的pclvisualizer的交互设置,设置到新的vtkrenderwindow上

3.3,渲染更新

复制代码
 ui.label->setText("Hello World");
   
    cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
    string path = "D:\\deskep\\pacl_learning\\rabitte.ply";
    pcl::io::loadPLYFile<pcl::PointXYZ>(path, *cloud);


    //有了这段代码以后,我们只需要做好pcl部分的渲染设置就可以。就可以不用管vtk部分
    //1,先做好pcl的PCLVisualizer的渲染部分,
    viewer1.reset(new pcl::visualization::PCLVisualizer("Simple Cloud Viewer", false));
    viewer1->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
    viewer1->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
    viewer1->setBackgroundColor(0.0, 0.0, 0.0);
    viewer1->resetCameraViewpoint();
    
    

    //2,创建一个vtkwindow,并添加渲染器(舞台)==绑定pcl的的渲染器
   // auto vtkrenwin = vtkGenericOpenGLRenderWindow::New();   //智能创建一个vtk渲染器窗口
    m_renderer= viewer1->getRendererCollection()->GetFirstRenderer();   //获取pcl的渲染器
    m_renderWindow->AddRenderer(m_renderer);   //将pcl的渲染器添加到渲染器窗口中
    ui.view_weight->setRenderWindow(m_renderWindow);   //将渲染窗口添加到ui的控件上

    //将pcl的交互系统,设置到vtk的窗口上的交互系统上。
    viewer1->setupInteractor(ui.view_weight->interactor(), m_renderWindow);

    m_renderer->ResetCamera();
    //3,渲染并更新
    ui.view_weight->renderWindow()->Render();
    ui.view_weight->update();

.h文件

bash 复制代码
#pragma once

#include <QtWidgets/QWidget>
#include "ui_pcltest.h"
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkCamera.h>
#include <QVTKOpenGLNativeWidget.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/point_types.h>

class pcltest : public QWidget
{
    Q_OBJECT

public:
    pcltest(QWidget *parent = nullptr);
    ~pcltest();

private slots:
    void adampt_window();
 
private:
    Ui::pcltestClass ui;
    vtkNew<vtkGenericOpenGLRenderWindow> m_renderWindow;
    vtkSmartPointer<vtkRenderer> m_renderer=nullptr;
    pcl::visualization::PCLVisualizer::Ptr viewer1;
    vtkNew<vtkMatrix4x4> homeMatrix;
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
    pcl::visualization::Camera cam;
    
  
};
相关推荐
金色熊族2 小时前
解析QTransform的用法
qt
追烽少年x4 小时前
Qt多线程编程:QThread与QtConcurrent的对比与应用
qt
小短腿的代码世界19 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
Python私教20 小时前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
用户8055336980320 小时前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt
小短腿的代码世界1 天前
Qt券商接口封装深度解析:统一API设计与多源适配
开发语言·qt·单元测试
T0uken1 天前
基于 vcpkg 与 LLVM-MinGW 的 Qt6 静态链接开发方案
c++·windows·qt
Ulyanov1 天前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真
(Charon)1 天前
【C++/Qt】Qt 实现 MQTT 测试工具:连接 Broker、订阅主题与发布消息
开发语言·c++·qt
Ulyanov1 天前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》:动态数据仪表盘与 NumPy 可视化 —— 从标量到向量的数据驱动进化
开发语言·python·qt·架构·numpy