VTK v9.0新版本找不到QVTKWidget.h头文件了?Qt设计师怎么办?

您所在的位置:网站首页 vtk怎么用 VTK v9.0新版本找不到QVTKWidget.h头文件了?Qt设计师怎么办?

VTK v9.0新版本找不到QVTKWidget.h头文件了?Qt设计师怎么办?

2023-03-21 12:19| 来源: 网络整理| 查看: 265

问题描述:

项目编译,报错,无法打开包括文件:“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

推荐若干VTK博客及开源案例

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3