VTK示例不起作用-QVTKOpenGLWidget

VTK Examples not working - QVTKOpenGLWidget?

本文关键字:-QVTKOpenGLWidget 不起作用 VTK      更新时间:2023-10-16

我试着进入Qt和VTK,但要走到这一步,我遇到了很多障碍。谷歌和stackoverflow帮了我很多忙,但我自己无法解决这个问题。它是关于QVTKOpenGLWidget的。我不知道如何得到这个,这个例子对我不起作用:

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

我还必须在CMakeLists.txt中添加以下行:

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

如果我尝试运行它,我会收到以下错误消息:

RenderWindowUISingleHeritage.cx:2:53:错误:没有用于调用"QVTKOpenGLWidget::SetRenderWindow(vtkNew&)"的匹配函数this->ui->qvtkWidget->SetRenderWindow(renderWindow);

RenderWindowUISingleInheritance.cx:33:error:调用"vtkRenderer::AddActor(vtkNew&)"时没有匹配的函数渲染器->AddActor(spherector);

RenderWindowUISingleInheritance.cx:37:64:错误:对"vtkRenderWindow::AddRenderer(vtkNew&)"的调用没有匹配的函数this->ui->qvtkWidget->GetRenderWindow()->AddRenderer(渲染器);

我不知道这个QVTKOpenGLWidget是从哪里来的,也不知道我是如何得到它的,但你似乎必须使用它来代替Qt5的QVTKOpenWidget,但它似乎不起作用?一般来说,我对Qt或VTK没有太多经验。所以这可能很容易解决。

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
}

它还告诉我以下事情(用//*X标记代码中的行):

  1. 类"Ui_SenderWindowUISingleHeritage"没有函数"setupUI">
  2. 类"Ui_SenderWindowUISingleHeritage"没有字段"qvtkWidget">
  3. 参数类型不匹配:类型"vtkMapper*"answers"vtkNew"不兼容
  4. 参数类型不匹配:类型"vtkProp*"answers"vtkNew"不兼容
  5. 类"Ui_SenderWindowUISingleHeritage"没有字段"qvtkWidget">
  6. 类"Ui_SenderWindowUISingleHeritage"没有字段"actionExit">
  7. 无法解析变量"qApp">

我希望有人能帮助我,因为我想进入VTK和Qt,这似乎是我开始与他们合作之前的最后挑战之一。即使你只能帮助其中的一小部分,请让我知道,因为每一小步都可能帮助我自己解决剩下的问题!

提前感谢

我在我的环境中构建了这个例子。若要进行编译,您需要更正文件RenderWindowUISingleInheritance.ccxx,将.get()放入这些对象SetRenderWindow(renderWindow.get())、SetMapper(sphereMaper.get)、AddActor

#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();
}
相关文章:
  • 没有找到相关文章