void VTKMainWindow::onOpenSlot()
{
QString filter;
filter = "DICM image file (*.dcm)";
QDir dir;
fileName = QFileDialog::getOpenFileName( this, QString(tr("Open DICOM Image")), dir.currentPath() , filter );
if ( fileName.isEmpty() == true )
return;
vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();
// 支持帶中文路徑的讀取
QByteArray ba = fileName.toLocal8Bit();
const char *fileName_str = ba.data();
reader->SetFileName(fileName_str);
reader->Update();
m_pImageViewer = vtkSmartPointer<vtkImageViewer2>::New();
m_pImageViewer->SetInputConnection(reader->GetOutputPort());
m_pImageViewer->SetRenderWindow(this->qvtkWidget->GetRenderWindow());
m_pImageViewer->SetupInteractor(this->qvtkWidget->GetRenderWindow()->GetInteractor());
this->qvtkWidget->GetRenderWindow()->Render();
}
其中OpenSlot響應pushbutton的一個信號,然後打開一個文件對話框,選擇一個DICOM文件。其中最重要的就是通過this->qvtkWidget->GetRenderWindow()設置RenderWindow,
m_pImageViewer->SetupInteractor(this->qvtkWidget->GetRenderWindow()->GetInteractor());來設置交互模式。
qvtkWidget是QVTKWidget的控件ID,這樣就完成了QVTKWidget和Qt的融合。下圖就是對應的界面,窗口就是對應的QVTKWidget控件。