如何在QTcreator里添加VTK库,以及如何添加qvtkwidget控件网上都有一些可行的方法,不再赘述。
添加好控件后,初学者不会使用,并且网上找的的一些方法各不相同,但无一例外都失败了,经过自己摸索,按照以下方法能够成功。
首先在qdesigner中拖出一个qvtkwidget控件
然后mainwindow.cpp中这么写,作用是生成一个八棱柱并显示。
头文件需要自己声明函数showvtk()
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCylinderSource.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <array>
#include "QVTKWidget.h"
ui(new Ui::MainWindow)
{
ui->setupUi(this);
showvtk();
}
void MainWindow::showvtk()
{
vtkCylinderSource* source = vtkCylinderSource::New();
source->SetHeight(13);
source->SetRadius(5);
source->SetResolution(8);
vtkPolyDataMapper* coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection(source->GetOutputPort());
vtkActor* coneActor = vtkActor::New();
coneActor->SetMapper(coneMapper);
vtkRenderer* render = vtkRenderer::New();
//vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
render->AddActor(coneActor);
render->SetBackground(0.8, 0.4, 0.4);
ui->qvtkWidget->GetRenderWindow()->AddRenderer(render);
ui->qvtkWidget->GetRenderWindow()->Render();
source->Delete();
coneMapper->Delete();
coneActor->Delete();
render->Delete();
//iren->Delete();
}
可以发现代码中并没有用到交互器,但是确实是可以正常拖动缩放的,为什么会这样我也不清楚。