Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形

这篇具有很好参考价值的文章主要介绍了Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考链接:

VS2017配置QT环境(详细版)_vs2017 qt-CSDN博客

QT5+VTK9.1最新配置方法_qt vtk-CSDN博客

VTK笔记-Qt5.12.11编译VTK9.0.3-QVTKOpenGLNativeWidget-CSDN博客

准备环境

环境: Qt 5.14.2 + VS 2017 + VTK9.0.1

安装好Qt及VS QT插件,编译VTK。

使用VS创建Qt Widget项目

在VS2017中依次点击文件-》新建-》工程,打开新建项目页面。
Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK
Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK
Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK
Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK

这里可以设置类名和文件名等,默认和项目名字一样。不需要修改的话直接点击Finish。
Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK

点击F5进入调试即可看到VS中出现了空的初始界面,到这里VS2017中的QT开发环境配置就全部完成了。

配置VTK依赖

项目右键 -> 属性

调试

环境:添加...\VTK\VTK-9.0.0\vtk-install\bind;

C/C++

常规 -> 附加包含目录:

添加 ...\VTK\VTK-9.0.0\vtk-install\include\vtk-9.0

链接器

常规 -> 附加库目录:

添加:

...\VTK\VTK-9.0.0\vtk-install\libd;

输入 -> 附加依赖项:

添加全部vtk库:

vtkChartsCore-9.0d.lib
vtkCommonColor-9.0d.lib
vtkCommonComputationalGeometry-9.0d.lib
vtkCommonCore-9.0d.lib
vtkCommonDataModel-9.0d.lib
vtkCommonExecutionModel-9.0d.lib
vtkCommonMath-9.0d.lib
vtkCommonMisc-9.0d.lib
vtkCommonSystem-9.0d.lib
vtkCommonTransforms-9.0d.lib
vtkDICOMParser-9.0d.lib
vtkDomainsChemistry-9.0d.lib
vtkdoubleconversion-9.0d.lib
vtkexodusII-9.0d.lib
vtkexpat-9.0d.lib
vtkFiltersAMR-9.0d.lib
vtkFiltersCore-9.0d.lib
vtkFiltersExtraction-9.0d.lib
vtkFiltersFlowPaths-9.0d.lib
vtkFiltersGeneral-9.0d.lib
vtkFiltersGeneric-9.0d.lib
vtkFiltersGeometry-9.0d.lib
vtkFiltersHybrid-9.0d.lib
vtkFiltersHyperTree-9.0d.lib
vtkFiltersImaging-9.0d.lib
vtkFiltersModeling-9.0d.lib
vtkFiltersParallel-9.0d.lib
vtkFiltersParallelImaging-9.0d.lib
vtkFiltersPoints-9.0d.lib
vtkFiltersProgrammable-9.0d.lib
vtkFiltersSelection-9.0d.lib
vtkFiltersSMP-9.0d.lib
vtkFiltersSources-9.0d.lib
vtkFiltersStatistics-9.0d.lib
vtkFiltersTexture-9.0d.lib
vtkFiltersTopology-9.0d.lib
vtkFiltersVerdict-9.0d.lib
vtkfreetype-9.0d.lib
vtkGeovisCore-9.0d.lib
vtkgl2ps-9.0d.lib
vtkglew-9.0d.lib
vtkGUISupportQt-9.0d.lib
vtkGUISupportQtSQL-9.0d.lib
vtkhdf5-9.0d.lib
vtkhdf5_hl-9.0d.lib
vtkImagingColor-9.0d.lib
vtkImagingCore-9.0d.lib
vtkImagingFourier-9.0d.lib
vtkImagingGeneral-9.0d.lib
vtkImagingHybrid-9.0d.lib
vtkImagingMath-9.0d.lib
vtkImagingMorphological-9.0d.lib
vtkImagingSources-9.0d.lib
vtkImagingStatistics-9.0d.lib
vtkImagingStencil-9.0d.lib
vtkInfovisCore-9.0d.lib
vtkInfovisLayout-9.0d.lib
vtkInteractionImage-9.0d.lib
vtkInteractionStyle-9.0d.lib
vtkInteractionWidgets-9.0d.lib
vtkIOAMR-9.0d.lib
vtkIOAsynchronous-9.0d.lib
vtkIOCityGML-9.0d.lib
vtkIOCore-9.0d.lib
vtkIOEnSight-9.0d.lib
vtkIOExodus-9.0d.lib
vtkIOExport-9.0d.lib
vtkIOExportGL2PS-9.0d.lib
vtkIOExportPDF-9.0d.lib
vtkIOGeometry-9.0d.lib
vtkIOHDF-9.0d.lib
vtkIOImage-9.0d.lib
vtkIOImport-9.0d.lib
vtkIOInfovis-9.0d.lib
vtkIOLegacy-9.0d.lib
vtkIOLSDyna-9.0d.lib
vtkIOMINC-9.0d.lib
vtkIOMotionFX-9.0d.lib
vtkIOMovie-9.0d.lib
vtkIONetCDF-9.0d.lib
vtkIOOggTheora-9.0d.lib
vtkIOParallel-9.0d.lib
vtkIOParallelXML-9.0d.lib
vtkIOPLY-9.0d.lib
vtkIOSegY-9.0d.lib
vtkIOSQL-9.0d.lib
vtkIOTecplotTable-9.0d.lib
vtkIOVeraOut-9.0d.lib
vtkIOVideo-9.0d.lib
vtkIOXML-9.0d.lib
vtkIOXMLParser-9.0d.lib
vtkjpeg-9.0d.lib
vtkjsoncpp-9.0d.lib
vtklibharu-9.0d.lib
vtklibproj-9.0d.lib
vtklibxml2-9.0d.lib
vtkloguru-9.0d.lib
vtklz4-9.0d.lib
vtklzma-9.0d.lib
vtkmetaio-9.0d.lib
vtknetcdf-9.0d.lib
vtkogg-9.0d.lib
vtkParallelCore-9.0d.lib
vtkParallelDIY-9.0d.lib
vtkpng-9.0d.lib
vtkpugixml-9.0d.lib
vtkRenderingAnnotation-9.0d.lib
vtkRenderingContext2D-9.0d.lib
vtkRenderingCore-9.0d.lib
vtkRenderingFreeType-9.0d.lib
vtkRenderingGL2PSOpenGL2-9.0d.lib
vtkRenderingImage-9.0d.lib
vtkRenderingLabel-9.0d.lib
vtkRenderingLOD-9.0d.lib
vtkRenderingOpenGL2-9.0d.lib
vtkRenderingQt-9.0d.lib
vtkRenderingSceneGraph-9.0d.lib
vtkRenderingUI-9.0d.lib
vtkRenderingVolume-9.0d.lib
vtkRenderingVolumeOpenGL2-9.0d.lib
vtkRenderingVtkJS-9.0d.lib
vtksqlite-9.0d.lib
vtksys-9.0d.lib
vtkTestingRendering-9.0d.lib
vtktheora-9.0d.lib
vtktiff-9.0d.lib
vtkverdict-9.0d.lib
vtkViewsContext2D-9.0d.lib
vtkViewsCore-9.0d.lib
vtkViewsInfovis-9.0d.lib
vtkViewsQt-9.0d.lib
vtkWrappingTools-9.0d.lib
vtkzlib-9.0d.lib

添加vtk窗口

QVTKOpenGLNativeWidget 实际上是VTK给写好的一个自定义控件,继承自QWidget类,所以只需要将QWdiget类提升为QVTKOpenGLNativeWidget类就行了

1.用Designer打开项目的界面文件(.ui后缀文件)

2.在左边的控件栏中,将Containers下的“Widget”这个控件拖入到用户界面中,然后右边的对象查看器中就能查到你拖入的QWidget控件对象。
Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK

3.对该对象点右键,选择“提升为”,提升为可以理解是将QT自带的控件类提升为开发者编写的自定义控件类。而QVTKOpenGLNativeWidget就是VTK编写的自定义控件类。

Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK

4.然后提升的类名称填上“QVTKOpenGLNativeWidget”,头文件填写“QVTKOpenGLNativeWidget.h”。基类选择QWidget。然后点击“添加”-》“提升”

Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK

提升的类名称:指自定义控件的类名称,VTK提供的自定义类名称就是QVTKOpenGLNativeWidget。

头文件:指自定义控件的头文件,VTK提供的自定义控件类的头文件就是QVTKOpenGLNativeWidget.h。注意大小写。如果不对应的话,会失效。

基类名称:指自定义的控件类的基类是谁,QVTKOpenGLNativeWidget的基类就是QWidget。选错了也是不行的。

添加:指保存这个设定,下次可以直接拿来使用,不用重新输入以上信息。

提升:指将你拖入UI中的QWidget控件,变成你写好的自定义控件类,在这里就是将QWidget类变成QVTKOpenGLNativeWidget类。

5.重命名该窗口控件的对象名,用来写代码的时候识别。网上所见通常命名为“qvtkWidget”

Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK

6.最后在你的主窗口类下调用ui的成员变量可以成功呼出qvtkWidget这个vtk窗口控件。

Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK

实际上以上就是自定义控件类的定义过程,区别是该自定义控件类不需要自己写一个类,而是VTK已经写好提供给我们,我们直接拿来提升就行了。

测试代码

#include "QtWidgetsApplication2.h"

#include <QSurfaceFormat>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>

#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);

QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());
    vtkNew<vtkNamedColors> colors;
    vtkNew<vtkSphereSource> sphereSource;
    vtkNew<vtkPolyDataMapper> sphereMapper;
    sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
    vtkNew<vtkActor> sphereActor;
    sphereActor->SetMapper(sphereMapper);
    sphereActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());
    vtkNew<vtkRenderer> renderer;
    renderer->AddActor(sphereActor);
    renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());
    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
    renderWindow->AddRenderer(renderer);
    renderWindow->SetWindowName("RenderWindowNoUIFile");
    setCentralWidget(ui.widget);
    ui.widget->setRenderWindow(renderWindow);
}

QtWidgetsApplication2::~QtWidgetsApplication2()
{}

运行结果:

Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形,# Qt + VTK,qt,VTK文章来源地址https://www.toymoban.com/news/detail-837481.html

到了这里,关于Qt 5.14.2插入VTK 9.0.1 窗口并绘制图形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt如何实现实时鼠标绘制图形

      想要实现鼠标拖拽绘图的效果,离不开鼠标的三大事件:按下、移动、释放 那么具体实现实时绘制矩形框的核心流程是什么呢? 第一步:鼠标左键点击,记录初始点击位置 第二步:在窗口中移动鼠标,实时获取鼠标拖动点,根据拖动点绘制指定形状 第三步:鼠标点击右键

    2024年02月15日
    浏览(35)
  • Qt鼠标拖动绘制基本几何图形

    用Qt鼠标事件实现基本几何图形的绘制,支持直线、矩形、圆形、椭圆。后期可以在此基础上进行扩展。 效果图 实现 本示例使用QGraphics体系来实现,因为要移动对象,所以生成的图形必须是一个单独的对象,鼠标拖动绘制的过程是在临时层中完成,release后生成一个矢量的图

    2024年02月13日
    浏览(38)
  • Vc - Qt - 绘制窗口背景色

    要在Qt中绘制一个背景颜色,你可以使用Qt的绘图功能来完成。下面是一种简单的方法: 步骤1:在你想要绘制背景颜色的QWidget(例如QMainWindow或QDialog)的派生类中,重写 它的paintEvent函数。 步骤2:在你的重写的paintEvent函数中,创建一个QPainter对象,并使用它来设置你想要的

    2024年02月13日
    浏览(36)
  • QT中窗口自绘制效果展示

    项目中需要使用QT进行窗口自绘,前期先做一下技术探索,参考相关资料代码熟悉流程。本着代码是最好的老师原则,在此记录一下。 目录 1.运行效果 2.代码结构 3.具体代码 myspeed.pro drawdialog.h meter1.h meter2.h drawdialog.cpp meter1.cpp meter2.cpp main.cpp

    2024年02月07日
    浏览(43)
  • Qt中QGraphicsView架构下实时鼠标绘制图形

    上一章节介绍了关于QGraphicsView的基础讲解,以及简单的类图创建,由上一章节中最后展示的动画效果来看,今年主要讲述如何在QGraphicsView架构下,实时拖动鼠标绘制图形! 今天主要以矩形为例,再来看一下展示效果吧! 想要实现鼠标拖拽绘图的效果,离不开鼠标的三大事件

    2024年01月22日
    浏览(44)
  • Qt关于QPainter绘制1px宽度图形带来的问题思考

    前段时间遇到这样一个问题,使用QPainter绘制直线的时候,设置了笔宽为1像素,但是绘制出来的线条却是2px宽度,而且设置的画笔颜色很明显是降低了透明度,不是最“纯正”的颜色。 当时就感觉非常奇怪,明明设置的画笔宽度是正常的,为啥绘制出来不是自己想要的样子。

    2023年04月20日
    浏览(40)
  • Qt 集成VTK

    Qt hello | 专注于Qt的技术分享平台 一,需求 集成VTK环境到Qt中 下载vtk源码,并使用cmake 结合vs2019编辑成dll库。 GitHub - Kitware/VTK: Mirror of Visualization Toolkit repository Qt工程引入,库比较多,偷懒的情况下全部引入。 pro文件配置如下: 3. UI文件中,创建一个QWidget,并将其提升为QV

    2024年04月27日
    浏览(27)
  • 【VTK】读取一个 STL 文件,并使用 Qt 显示出来,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 直接先把效果放出来,有需要就往下看。 骷髅3D打印3D模型

    2024年02月14日
    浏览(69)
  • win10下在Qt中使用VTK(安装VS2017+安装QT5.9.9+编译配置VTK8.2.0)

    作为一个只浅学过C语言和C++的纯小白,在编译VTK(visualization toolkit)并与Qt结合的过程中遇到了很多问题,零零碎碎也看了许多文章教程,但由于版本兼容、过程不完整等问题走了许多弯路,最后东拼西凑勉强完成,故写下这篇文章供大家参考。 本文主要目的是安装vs2017,

    2024年02月11日
    浏览(52)
  • 【VTK】VTK 显示小球例子,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 编号 内容 1 【Visual Studio】在 Windows 上使用 Visual Studio 构建 VTK 2 【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK 3 【VTK】VTK 显示小球例子,在 Windows 上使用 Visual Studio 配

    2024年02月17日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包