2017-04-19 13 views
0

QTDesigner에서 QVTKOpenGLWidgetvtkGenericOpenGlRenderWindow과 함께 사용하려하지만 검은 색 창이 나타납니다. vtkGenericOpenGlRenderWindow으로 PointCloud 라이브러리 (PCL)의 PCLVizualizer을 사용하면 모든 것이 잘 동작합니다. PCL과 같은 방식으로 사용자 정의 뷰어를 만들려고합니다. QTDesigner를 사용하는 QVTKOpenGLWidget 및 vtkGenericOpenGlRenderWindow

QMainPanel::QMainPanel(HWND hWnd) : 
    QWinWidget(hWnd), 
    ui(new Ui::QMainPanel) 
{ 
    ui->setupUi(this); 

    rendererTest = vtkSmartPointer<vtkRenderer>::New(); 
    rendererTest->GradientBackgroundOn(); 
    rendererTest->SetBackground(0.27,0.27,0.27); 
    rendererTest->SetBackground2(0.44,0.44,0.44); 
    windowTest = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New(); 
    windowTest->AddRenderer(rendererTest); 
    interactorTest = vtkSmartPointer<vtkRenderWindowInteractor>::New(); 
    interactorTest->SetRenderWindow(windowTest); 
    ui->openGLWidget->SetRenderWindow(windowTest); // QVTKOpenGLWidget *openGLWidget; 
} 

감사합니다

편집 : 제거 "인터랙은"내 문제를 해결했다.

+0

:( – Sebastien247

+1

에게 당신을 : 그래서, 당신은 다음과 같이 사용자 정의 위젯을 사용할 수 있습니다 문제를 해결 한 것으로 표시하지 말고 문제를 해결 한 방법을 설명하는 원본 질문에 대한 완전한 대답을 작성한 다음 자신의 대답을 수락 할 수 있습니다. s는 스택 오버플로 규칙과 관련하여 완벽하게 유효하며 향후 독자가 문제와 솔루션을 쉽게 이해할 수 있습니다. – Antwane

답변

0

PCL 양식 https://github.com/PointCloudLibrary/pcl의 마스터 버전을 가져와야합니다. 이렇게하면 더 많은 생성자가있는 PCLVisualizer가 제공됩니다. 내 문제가 해결되지 최대 :

VideoQVTKOpenGLWidget.h



    #ifndef VIDEOQVKTOPENGLWIDGET_H 
    #define VIDEOQVKTOPENGLWIDGET_H 

    #include <QWidget> 
    #include <QVTKOpenGLWidget.h> 
    #include <pcl/visualization/pcl_visualizer.h> 
    using namespace pcl::visualization; 

    class VideoQVTKOpenGLWidget : public QVTKOpenGLWidget 
    { 
     public: 
     explicit VideoQVTKOpenGLWidget(QWidget *parent = 0); 
     void populateCloud(pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud); 

     private: 
     boost::shared_ptr<PCLVisualizer> _viewer; 
     vtkSmartPointer<vtkGenericOpenGLRenderWindow> _renderWindow; 
    }; 

    #endif // VIDEOQVKTOPENGLWIDGET_H 

VideoQVTKOpenGLWidget.cpp



    #include "VideoQVTKOpenGLWidget.h" 

    #include <vtkPointPicker.h> 
    #include <vtkGenericOpenGLRenderWindow.h> 

    VideoQVTKOpenGLWidget::VideoQVTKOpenGLWidget(QWidget *parent) 
     : QVTKOpenGLWidget(parent) 
    { 
     auto renderer = vtkSmartPointer<vtkRenderer>::New(); 
     _renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New(); 
     _renderWindow->AddRenderer(renderer); 
     _viewer.reset(new PCLVisualizer(renderer, _renderWindow, "viewer", false)); 
     this->SetRenderWindow(_viewer->getRenderWindow()); 
     this->update(); 
    } 

    void VideoQVTKOpenGLWidget::populateCloud(pcl::PointCloud <pcl::PointXYZRGBA>::Ptr cloud) 
    { 
     if(!_viewer->updatePointCloud(cloud, "cloud")) { 
     _viewer->addPointCloud(cloud, "cloud"); 
     } 
     _renderWindow->Render(); 
    }