项目编译,报错,无法打开包括文件:“qvtkwidget.h”: No such file or directory
1、VTK7.x早期版本中,官方仅提供QVTKWidget,需要手动将QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib放到qt design下的plugin里。
2、在Qt版本为5.4之后时,在VTK8.2之前的版本,一般是使用QVTKOpenGLWidget;在VTK8.2及之后的版本里,引入了QVTKOpenGLNativeWidget;
3、VTK9.0版本删除了QVTKWidget,但是有QVTKOpenGLNativeWidget,QVTKOpenGLStereoWidget,QVTKOpenGLWindow。
QVTKOpenGLNativeWidget在新版本源码的头文件路径是:
v9.0.3
https://gitlab.kitware.com/vtk/vtk/-/blob/v9.0.3/GUISupport/Qt/QVTKOpenGLNativeWidget.h
v9.1.0
https://gitlab.kitware.com/vtk/vtk/-/blob/v9.1.0/GUISupport/Qt/QVTKOpenGLNativeWidget.h
1、我们一般使用QVTKOpenGLNativeWidget来代替旧版本的QVTKWidget。新版本不再像QVTKWidget以前那样有所谓的Plugin.dll和Plugin.lib了。
2、新旧版本的详细的头文件和函数代替的情况如下:
注释掉的是旧版本,没注释的是新版本
//#include
#include
//class VtkWidget : public QVTKWidget
class VtkWidget : public QVTKOpenGLNativeWidget
//m_vtkWidget->GetInteractor()
m_vtkWidget->interactor()
//m_vtkWidget->GetRenderWindow()
m_vtkWidget->renderWindow()
//m_vtkWidget->SetRenderWindow()
m_vtkWidget->setRenderWindow()
//#define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle, vtkRenderingFreeType, vtkRenderingOpenGL)
#define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle, vtkRenderingFreeType, vtkRenderingOpenGL2)
//#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2)
//VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkRenderingOpenGL2)
//VTK_MODULE_INIT(vtkRenderingContextOpenGL)
VTK_MODULE_INIT(vtkRenderingContextOpenGL2)
3、QVTKOpenGLNativeWidget怎么在Qt使用起来?
打开Qt设计师界面,先手动拖入一个普通的Widget控件,然后再提升这个窗口部件
提升之后:
源码举例,功能是打开*.stl文件,并显示在QVTKOpenGLNativeWidget控件上
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void openFileSlot();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
源文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(openFileSlot()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::openFileSlot()
{
QString selectFilePath = QFileDialog::getOpenFileName(this, QString("选择STL文件"), QString(""), QString("文件(*.stl)"));
if (selectFilePath.isEmpty())
{
ui->textBrowser->append("选择STL文件路径为空!");
return;
}
// 原始图像
vtkSmartPointer reader = vtkSmartPointer::New();
reader->SetFileName(selectFilePath.toStdString().c_str());
reader->Update();
//将source转换成mapper
vtkSmartPointer mapper = vtkSmartPointer::New();
mapper->SetInputConnection(reader->GetOutputPort());
//送入渲染引擎进行显示
vtkSmartPointer actor = vtkSmartPointer::New();
actor->SetMapper(mapper);
//渲染
vtkSmartPointer renderer = vtkSmartPointer::New();
renderer->AddActor(actor);
renderer->SetBackground(.0, .0, .0);
//设置渲染窗口
vtkSmartPointer window = vtkSmartPointer::New();
ui->qvtkWidget->setRenderWindow(window);
ui->qvtkWidget->renderWindow()->AddRenderer(renderer); //等价于window->AddRenderer(renderer);
//ok
ui->textBrowser->append(QString("载入文件:") + selectFilePath + QString(" 成功 !"));
}
1、QVTKWidget、QVTKOpenGLWidget、QVTKOpenGLNativeWidget、QVTKWidget2 区别
https://blog.csdn.net/a15005784320/article/details/99460999
2、VTK笔记-Qt5.12.11编译VTK9.0.3-QVTKOpenGLNativeWidget【推荐阅读】
https://blog.csdn.net/liushao1031177/article/details/118719782
Beyond欣
https://blog.csdn.net/a15005784320/article/details/104855111
阿兵-AI医疗
https://blog.csdn.net/webzhuce/category_9268767.html
黑山老妖的博客
https://blog.csdn.net/liushao1031177
https://github.com/lorensen/VTKExamples
https://github.com/kimtaikee/QVTKDemo
https://github.com/kimtaikee/QVTKDemo_data