主要是能跑通就行,细节不重要
ui设计界面
要点:
qvtkWidget
对象是用空白的Widget
组件提升为QVTKOpenGLNativeWidget
Example.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_Example.h"
#include <vtkSmartPointer.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkLight.h>
#include <vtkCamera.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
class Example : public QMainWindow
{
Q_OBJECT
public:
Example(QWidget *parent = nullptr);
~Example();
private slots:
void vtkPipeLine();
private:
Ui::ExampleClass ui;
vtkSmartPointer<vtkCylinderSource> cylinder;
vtkSmartPointer<vtkPolyDataMapper> cylinderMapper;
vtkSmartPointer<vtkActor> cylinderActor;
vtkSmartPointer<vtkLight> light;
vtkSmartPointer<vtkCamera> camera;
vtkSmartPointer<vtkRenderer> renderer;
vtkSmartPointer<vtkRenderWindowInteractor> iren;
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style;
};
Example.cpp
#include "Example.h"
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2); //错误:no override found for 'vtkRayCastImageDisplayHelper'.
Example::Example(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
// 信号槽链接
connect(ui.pushButton, &QPushButton::clicked, this, &Example::vtkPipeLine);
}
Example::~Example()
{
}
void Example::vtkPipeLine()
{
// rsource
cylinder = vtkSmartPointer<vtkCylinderSource>::New();
cylinder->SetHeight(3.0);
cylinder->SetRadius(1.0);
cylinder->SetResolution(50);
// mapper
cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
// actor
cylinderActor = vtkSmartPointer<vtkActor>::New();
cylinderActor->SetMapper(cylinderMapper);
// renderer
renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(cylinderActor);
renderer->SetBackground(0.1, 0.2, 0.3);
renderer->ResetCamera();
// render window
ui.qvtkWidget->renderWindow()->AddRenderer(renderer);
ui.qvtkWidget->renderWindow()->SetSize(300, 400);
// render window interactor
iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(ui.qvtkWidget->renderWindow());
irStyle = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
iren->SetInteractorStyle(irStyle);
iren->Initialize();
iren->Start();
}