Qt 集成VTK

本文详细描述了如何将VTK库与Qt项目集成,包括下载和配置步骤,以及在UI中创建QVTKWidget来显示STL文件的示例代码。展示了从下载VTK源码、配置编译选项到实际展示3D模型的过程。
摘要由CSDN通过智能技术生成

Qt hello | 专注于Qt的技术分享平台

一,需求
集成VTK环境到Qt中


二,步骤

  1. 下载vtk源码,并使用cmake 结合vs2019编辑成dll库。
    GitHub - Kitware/VTK: Mirror of Visualization Toolkit repository
  2. Qt工程引入,库比较多,偷懒的情况下全部引入。
    pro文件配置如下:
    
    #VTK
    INCLUDEPATH += $PWD/3rd/VTK_8.2/include/vtk-8.2
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkChartsCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonColor-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonComputationalGeometry-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonDataModel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonExecutionModel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonMath-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonMisc-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonSystem-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonTransforms-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkDICOMParser-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkDomainsChemistry-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkDomainsChemistryOpenGL2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkexpat-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersAMR-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersExtraction-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersFlowPaths-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersGeneral-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersGeneric-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersGeometry-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersHybrid-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersHyperTree-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersImaging-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersModeling-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersParallel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersParallelImaging-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersProgrammable-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersSelection-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersSMP-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersSources-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersStatistics-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersTexture-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersVerdict-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkfreetype-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkGeovisCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkglew-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkGUISupportQt-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkGUISupportQtSQL-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkhdf5-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkhdf5_hl-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingColor-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingFourier-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingGeneral-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingHybrid-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingMath-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingMorphological-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingSources-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingStatistics-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingStencil-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInfovisCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInfovisLayout-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInteractionImage-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInteractionStyle-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInteractionWidgets-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOAMR-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOEnSight-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOExodus-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOExport-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOGeometry-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOImage-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOImport-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOInfovis-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOLegacy-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOLSDyna-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOMINC-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOMovie-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIONetCDF-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOParallel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOParallelXML-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOPLY-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOSQL-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOVideo-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOXML-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOXMLParser-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkjpeg-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkjsoncpp-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtklibxml2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkmetaio-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkNetCDF-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkParallelCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkpng-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkproj-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingAnnotation-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingContext2D-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingContextOpenGL2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingFreeType-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingImage-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingLabel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingLOD-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingOpenGL2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingQt-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingVolume-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingVolumeOpenGL2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtksqlite-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtksys-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtktiff-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkverdict-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkViewsContext2D-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkViewsCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkViewsInfovis-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkViewsQt-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkzlib-8.2.lib

3. UI文件中,创建一个QWidget,并将其提升为QVTKWidget.

4. 我们以显示一个stl文件为例。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkSmartPointer.h>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

    vtkSmartPointer<vtkRenderer> Renderer;
    vtkSmartPointer<vtkRenderWindow> RenderWindow;
};
#endif // WIDGET_H

#include <vtkSTLReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkAutoInit.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);


    RenderWindow=vtkSmartPointer<vtkRenderWindow>::New();
    Renderer = vtkSmartPointer<vtkRenderer>::New();
    Renderer->SetBackground(0.2, 0.2, 0.2);
    RenderWindow->AddRenderer(Renderer);
    ui->widget->SetRenderWindow(RenderWindow);


    std::string file =  "C:\\Users\\keiler\\Desktop\\file\\you-hou-che-men.stl";
    vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
    reader->SetFileName(file.c_str());
    reader->Update();

    vtkSmartPointer<vtkPolyDataMapper> mapper =    vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(reader->GetOutputPort());

    vtkNew<vtkActor> partActor;
    partActor->SetMapper(mapper);
    Renderer->AddActor(partActor);
}

Widget::~Widget()
{
    delete ui;
}

5. 效果

集成VTK | Qt hello

6. 备注

集成VTK | Qt hello

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土拨鼠不是老鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值