2017-10-17 5 views
0

Ich habe versucht, in Qt und VTK zu kommen und ich hatte viele Hindernisse, um so weit zu kommen. google und stackoverflow haben mir sehr geholfen, aber ich kann dieses Problem nicht alleine lösen. Es handelt sich um das QVTKOpenGLWidget. Ich weiß nicht, wie diese zu erhalten und dieses Beispiel funktioniert nicht für mich:VTK Beispiele funktionieren nicht - QVTKOpenGLWidget?

https://lorensen.github.io/VTKExamples/site/Cxx/Qt/RenderWindowUISingleInheritance/

Ich musste auch die folgende Zeile in dem CMakeLists.txt hinzufügen:

SET(VTK_DIR "/path/to/cmake/vtk-8.0" CACHE PATH "VTK directory override" FORCE) 

Wenn ich versuche, es zu laufen bekomme ich folgende Störmeldungen:

RenderWindowUISingleInheritance.cxx: 21: 53: Fehler: keine passende Funktion für Aufruf von 'QVTKOpenGLWidget :: SetRenderWindow (vtkNew &)' this-> UI-> qv tkWidget-> SetRenderWindow (renderWindow);

RenderWindowUISingleInheritance.cxx: 34: 33: Fehler: keine Anpassungsfunktion für Aufruf von ‚vtkRenderer :: AddActor (vtkNew &)‘ renderer-> AddActor (sphereActor);

RenderWindowUISingleInheritance.cxx: 37: 64: Fehler: keine Anpassungsfunktion für Aufruf von ‚vtkRenderWindow :: AddRenderer (vtkNew &)‘ this-> UI-> qvtkWidget-> GetRenderWindow() -> AddRenderer (Renderer);

Ich weiß nicht, woher dieses QVTKOpenGLWidget kommt und wie ich es bekomme, aber es scheint, dass Sie dies anstelle von QVTKOpenWidget mit Qt5 verwenden müssen, aber es scheint, dass es nicht funktioniert? Ich habe nicht viel Erfahrung mit Qt oder VTK im Allgemeinen. Es könnte also leicht zu lösen sein.

RenderWindowUISingleInheritance.cxx:

#include "RenderWindowUISingleInheritance.h" 
// This is included here because it is forward declared in 
// RenderWindowUISingleInheritance.h 
#include "ui_RenderWindowUISingleInheritance.h" 

#include <vtkGenericOpenGLRenderWindow.h> 
#include <vtkNew.h> 
#include <vtkPolyDataMapper.h> 
#include <vtkRenderer.h> 
#include <vtkRenderWindow.h> 
#include <vtkSphereSource.h> 

// Constructor 
RenderWindowUISingleInheritance::RenderWindowUISingleInheritance() 
{ 
    this->ui = new Ui_RenderWindowUISingleInheritance; 
    this->ui->setupUi(this); //*1 

    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow; 
    this->ui->qvtkWidget->SetRenderWindow(renderWindow); //*2 


    // Sphere 
    vtkNew<vtkSphereSource> sphereSource; 
    sphereSource->Update(); 
    vtkNew<vtkPolyDataMapper> sphereMapper; 
    sphereMapper->SetInputConnection(sphereSource->GetOutputPort()); 
    vtkNew<vtkActor> sphereActor; 
    sphereActor->SetMapper(sphereMapper); //*3 

    // VTK Renderer 
    vtkNew<vtkRenderer> renderer; 
    renderer->AddActor(sphereActor); //*4 

    // VTK/Qt wedded 
    this->ui->qvtkWidget->GetRenderWindow()->AddRenderer(renderer); //*5 

    // Set up action signals and slots 
    connect(this->ui->actionExit, SIGNAL(triggered()), this, SLOT(slotExit())); //*6 

} 

void RenderWindowUISingleInheritance::slotExit() 
{ 
    qApp->exit(); //*7 
} 

Es sagt auch mir folgende Dinge (die Zeilen im Code markiert mit // * X):

  1. Class 'Ui_RenderWindowUISingleInheritance' nicht habe eine Funktion 'setupUI'
  2. Klasse 'Ui_RenderWindowUISingleInheritance' hat kein Feld 'qvtkWidget'
  3. Parametertyp stimmt nicht überein: Typen 'v tkMapper * 'und 'vtkNew' sind nicht kompatibel
  4. Parametertypenkonflikt: Typen 'vtkProp *' und 'vtkNew' sind nicht kompatibel
  5. Class 'Ui_RenderWindowUISingleInheritance' haben kein Feld 'qvtkWidget'
  6. Class' Ui_RenderWindowUISingleInheritance‘haben kein Feld‚actionExit‘
  7. nicht variabel lösen können‚qApp‘

ich hoffe, dass mir jemand helfen kann, da ich in VTK und Qt erhalten möchten und dies scheint eine davon zu sein die letzten Herausforderungen, bevor ich anfangen kann, mit ihnen zu arbeiten. Auch wenn Sie nur mit einem kleinen Teil davon helfen können, lassen Sie es mich bitte wissen, da jeder kleine Schritt mir helfen kann, den Rest alleine zu lösen!

Vielen Dank im Voraus

+0

Ich habe ähnliche Probleme. Setup mit diesen beiden ist sehr schmerzhaft. Ich habe gelesen, dass QVTKWidget veraltet ist, daher verwenden alle Beispiele QVTKOpenGlWidget. Aber es gibt fast keine Dokumentation darüber, wie man sie zusammenarbeiten lässt – Hernan

Antwort

0

Ich baue dieses Beispiel in meiner Umgebung. Zum Kompilieren müssen Sie die Datei RenderWindowUISingleInheritance korrigieren.cxx setzen .get() in diesen Objekten SetRenderWindow (renderWindow.Get()), SetMapper (sphereMapper.Get()), AddActor (sphereActor.Get()) und AddRenderer (Renderer. Get()):

#include "RenderWindowUISingleInheritance.h" 

// This is included here because it is forward declared in 
// RenderWindowUISingleInheritance.h 
#include "ui_RenderWindowUISingleInheritance.h" 

#include <vtkGenericOpenGLRenderWindow.h> 
#include <vtkNew.h> 
#include <vtkPolyDataMapper.h> 
#include <vtkRenderer.h> 
#include <vtkRenderWindow.h> 
#include <vtkSphereSource.h> 

// Constructor 
RenderWindowUISingleInheritance::RenderWindowUISingleInheritance() 
{ 
    this->ui = new Ui_RenderWindowUISingleInheritance; 
    this->ui->setupUi(this); 

    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow; 
    this->ui->qvtkWidget->SetRenderWindow(renderWindow.Get()); 


    // Sphere 
    vtkNew<vtkSphereSource> sphereSource; 
    sphereSource->Update(); 
    vtkNew<vtkPolyDataMapper> sphereMapper; 
    sphereMapper->SetInputConnection(sphereSource->GetOutputPort()); 
    vtkNew<vtkActor> sphereActor; 
    sphereActor->SetMapper(sphereMapper.Get()); 

    // VTK Renderer 
    vtkNew<vtkRenderer> renderer; 
    renderer->AddActor(sphereActor.Get()); 

    // VTK/Qt wedded 
    this->ui->qvtkWidget->GetRenderWindow()->AddRenderer(renderer.Get()); 

    // Set up action signals and slots 
    connect(this->ui->actionExit, SIGNAL(triggered()), this, SLOT(slotExit())); 

} 

void RenderWindowUISingleInheritance::slotExit() 
{ 
    qApp->exit(); 
}