本想在Qvtk中添加一个图形,本想直接添加个图形进去就行了,但是我需要做一个鼠标交互事件,所以查阅资料之后发现需要使用到RenderWindow以及renderWindowInteractor来重新实现某些交互事件,所以我就将图形添加到actor中,然后actor加入到renderer中,最后使用QVTK的SetRenderWindow函数将其导向设置好的RenderWindow上,接下来正常显示。
demo代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//*****************************************
///
QVTKWidget *qvtk=this->ui->qvtkWidget;
// Setup window
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
// setup sphere
vtkSmartPointer<vtkSphereSource> sphereSource =
vtkSmartPointer<vtkSphereSource>::New();
sphereSource->SetCenter(0.0, 0.0, 0.0);
sphereSource->SetRadius(5.0);
sphereSource->Update();
// setup map and actor
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(sphereSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkNamedColors> colors =
vtkSmartPointer<vtkNamedColors>::New();
// Setup renderer
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackground(colors->GetColor3d("Slate_grey").GetData());
renderWindow->AddRenderer(renderer);
renderer->AddActor(actor);
qvtk->SetRenderWindow(renderWindow);
// create stuff for user interaction
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
/*
vtkSmartPointer<vtkUserInteractionStyle> inter = vtkUserInteractionStyle::New ();
inter->SetDefaultRenderer(renderer);
renderWindowInteractor->SetInteractorStyle( inter );
*/
// make the link between the renderwindow and the interactor
renderWindowInteractor->SetRenderWindow ( renderWindow );
qvtk->show();
renderWindow->Render ();
renderWindowInteractor->Initialize();
}
MainWindow::~MainWindow()
{
delete ui;
}
输出结果: