QVTKWidget控件不是Qt中默认控件,需要手动编译。用CMake编译VTK过程中,需要选择VTK支持QT。网络上有很多教程,不再重复了。
但有一点要提醒大家:只需要将Release版本中QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib放在designer文件夹下就可以了,QVTK.dll不需要放入该文件夹下,否则会出现:
qwidget: must construct a qapplication before a qpaintde 错误,因为Release与Debug中DLL混合在一起。
vtkImageViewer2类中的对象适合于显示图像,对vtkActor、vtkRender等已经做了封装。
测试代码如下:
// 创建vtk图像阅读器2类的对象用来显示其他对象读取到内存中的图像。
m_pImageViewer = vtkSmartPointer<vtkImageViewer2>::New();
// 渲染场景。
m_pRenderder = vtkSmartPointer<vtkRenderer>::New();
// 设置m_QVTKWidget的渲染器。
ui->m_QVTKWidget->GetRenderWindow()->AddRenderer(m_pRenderder);
// 用vtkJPEGReader类的对象读取JPG图像,即将磁盘中的图像加载进内存中。
vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName(fileName_str);
// 将reader的输出作为m_pImageViewer的输入,并设置m_pImageViewer与渲染器m_pRenderer的关联。
m_pImageViewer->SetInput(reader->GetOutput());
m_pImageViewer->UpdateDisplayExtent();
// 设置为同一个渲染窗口。
m_pImageViewer->SetRenderWindow(ui->m_QVTKWidget->GetRenderWindow());
// 设置渲染场景。
m_pImageViewer->SetRenderer(m_pRenderder);
// 交互方式。
m_pImageViewer->SetupInteractor(ui->m_QVTKWidget->GetRenderWindow()->GetInteractor());
// 默认就是这个方向的。
m_pImageViewer->SetSliceOrientationToXY();
m_pImageViewer->GetImageActor()->InterpolateOff();
m_pRenderder->ResetCamera();
m_pRenderder->DrawOn();
// 自动绘制出图像。
ui->m_QVTKWidget->GetRenderWindow()->Render();
QVTKWidget部件显示二维图像的效果如下图,在基于Qt开发的数字图像处理软件中显示,并同时读取图片的尺寸、图像深度和通道数等基本属性。