先使用VTK显示一张图片。
新建一个Qt工程,将QWidget提升为vxkGenericOpenGLRenderWindow
读取数据
1 2 3 4
| vtkSmartPointer<vtkPNGReader> reader = vtkSmartPointer<vtkPNGReader>::New(); reader->SetFileName(selectFilePath.toStdString().c_str()); reader->Update();
|
图片查看器
1 2 3
| vtkSmartPointer< vtkImageViewer2 > m_pImageViewer= vtkSmartPointer< vtkImageViewer2 >::New(); m_pImageViewer->SetInputConnection(reader->GetOutputPort());
|
设置渲染窗口
创建OpenGL窗口
1
| vtkSmartPointer<vtkGenericOpenGLRenderWindow> window = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
|
设置渲染窗口
1 2 3
| ui->widget->setRenderWindow(window); m_pImageViewer->SetRenderWindow(window); m_pImageViewer->Render();
|
图片是在view上显示的,view依附于window,所以要想界面显示图片就得刷新viewer
事件
先绑定事件
1 2 3 4 5
| m_Connections = vtkEventQtSlotConnect::New(); m_Connections->Connect(window->GetInteractor(), vtkCommand::MouseMoveEvent, this, SLOT(updateCoords(vtkObject*)));
|
槽函数
1 2 3 4 5 6 7 8 9 10 11 12 13
| void MainWindow::updateCoords(vtkObject *obj) { vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::SafeDownCast(obj); int event_pos[2]; iren->GetEventPosition(event_pos); QString str; str.sprintf("x=%d : y=%d", event_pos[0], event_pos[1]); ui->statusbar->showMessage(str); }
|
效果为
