2017-04-19 55 views
0

QTDesignerでQVTKOpenGLWidgetvtkGenericOpenGlRenderWindowで使用しようとしていますが、黒いウィンドウが表示されます。 PointCloudライブラリ(PCL)のPCLVizualizervtkGenericOpenGlRenderWindowで使用すると、すべて正常に動作します。 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

あなたをあなたの質問を編集してそれを解決済みとしてマークするのではなく、元の質問に完全な答えを書いて、あなたの問題の解決方法を説明してください。スタックオーバーフロールールに関しては完全に有効であり、将来の読者が問題と解決策を理解しやすくなります – 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(); 
    } 

関連する問題