Qt 5.14.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口
操作系统:win 10
QT: 5.15.2
VTK : 9.1
一、VTK库编译
1、从官网下载vtk库现在已经更新到9.2.2 了
2、下载Cmake
3、使用Cmake 编译vtk源码
注意点 : 1、有三个路径,source build install 2、对应Qt的安装位置4、使用vs 生产要bulid 两次,一次是debug 还有一次是release
二、VTK 库引入
如何先键的项目是这种情况,那么就说明我们确实vtk 相关的库,我们要在pro 文件中加载库
1 # VTK 2 win32:CONFIG(release, debug|release):LIBS += LD:/pcl_lib/VTK/lib\ 3 lvtkChartsCore9.1\ 4 lvtkCmonColor9.1\ 5 lvtkCmonCputationalGeetry9.1\ 6 lvtkCmonCore9.1\ 7 lvtkCmonDataModel9.1\ 8 lvtkCmonExecutionModel9.1\ 9 lvtkCmonMath9.1\ 10 lvtkCmonMisc9.1\ 11 lvtkCmonSystem9.1\ 12 lvtkCmonTransforms9.1\ 13 lvtkDICParser9.1\ 14 lvtkDainsChemistry9.1\ 15 lvtkDainsChemistryOpenGL29.1\ 16 lvtkdoubleconversion9.1\ 17 lvtkexodusII9.1\ 18 lvtkexpat9.1\ 19 lvtkFiltersAMR9.1\ 20 lvtkFiltersCore9.1\ 21 lvtkFiltersExtraction9.1\ 22 lvtkFiltersFlowPaths9.1\ 23 lvtkFiltersGeneral9.1\ 24 lvtkFiltersGeneric9.1\ 25 lvtkFiltersGeetry9.1\ 26 lvtkFiltersHybrid9.1\ 27 lvtkFiltersHyperTree9.1\ 28 lvtkFiltersImaging9.1\ 29 lvtkFiltersModeling9.1\ 30 lvtkFiltersParallel9.1\ 31 lvtkFiltersParallelImaging9.1\ 32 lvtkFiltersPoints9.1\ 33 lvtkFiltersProgrammable9.1\ 34 lvtkFiltersSelection9.1\ 35 lvtkFiltersSMP9.1\ 36 lvtkFiltersSources9.1\ 37 lvtkFiltersStatistics9.1\ 38 lvtkFiltersTexture9.1\ 39 lvtkFiltersTopology9.1\ 40 lvtkFiltersVerdict9.1\ 41 lvtkfmt9.1\ 42 lvtkfreetype9.1\ 43 lvtkGeovisCore9.1\ 44 lvtkgl2ps9.1\ 45 lvtkglew9.1\ 46 lvtkGUISupportQt9.1\ 47 lvtkGUISupportQtQuick9.1\ 48 lvtkGUISupportQtSQL9.1\ 49 lvtkhdf59.1\ 50 lvtkhdf5_hl9.1\ 51 lvtkImagingColor9.1\ 52 lvtkImagingCore9.1\ 53 lvtkImagingFourier9.1\ 54 lvtkImagingGeneral9.1\ 55 lvtkImagingHybrid9.1\ 56 lvtkImagingMath9.1\ 57 lvtkImagingMorphological9.1\ 58 lvtkImagingSources9.1\ 59 lvtkImagingStatistics9.1\ 60 lvtkImagingStencil9.1\ 61 lvtkInfovisCore9.1\ 62 lvtkInfovisLayout9.1\ lvtkInteractionImage9.1\ 64 lvtkInteractionStyle9.1\ 65 lvtkInteractionWidgets9.1\ 66 lvtkIOAMR9.1\ 67 lvtkIOAsynchronous9.1\ 68 lvtkIOCGNSReader9.1\ 69 lvtkIOChemistry9.1\ 70 lvtkIOCityGML9.1\ 71 lvtkIOCONVERGECFD9.1\ 72 lvtkIOCore9.1\ 73 lvtkIOEnSight9.1\ 74 lvtkIOExodus9.1\ 75 lvtkIOExport9.1\ 76 lvtkIOExportGL2PS9.1\ 77 lvtkIOExportPDF9.1\ 78 lvtkIOGeetry9.1\ 79 lvtkIOHDF9.1\ 80 lvtkIOImage9.1\ 81 lvtkIOImport9.1\ 82 lvtkIOInfovis9.1\ 83 lvtkIOIOSS9.1\ 84 lvtkIOLegacy9.1\ 85 lvtkIOLSDyna9.1\ 86 lvtkIINC9.1\ 87 lvtkIotionFX9.1\ 88 lvtkIovie9.1\ 89 lvtkIONetCDF9.1\ 90 lvtkIOOggTheora9.1\ 91 lvtkIOParallel9.1\ 92 lvtkIOParallelXML9.1\ 93 lvtkIOPLY9.1\ 94 lvtkIOSegY9.1\ 95 lvtkIOSQL9.1\ 96 lvtkioss9.1\ 97 lvtkIOTecplotTable9.1\ 98 lvtkIOVeraOut9.1\ 99 lvtkIOVideo9.1\ 100 lvtkIOXML9.1\ 101 lvtkIOXMLParser9.1\ 102 lvtkjpeg9.1\ 103 lvtkjsoncpp9.1\ 104 lvtkkissfft9.1\ 105 lvtklibharu9.1\ 106 lvtklibproj9.1\ 107 lvtklibxml29.1\ 108 lvtkloguru9.1\ 109 lvtklz49.1\ 110 lvtklzma9.1\ 111 lvtkmetaio9.1\ 112 lvtknetcdf9.1\ 113 lvtkogg9.1\ 114 lvtkParallelCore9.1\ 115 lvtkParallelDIY9.1\ 116 lvtkpng9.1\ 117 lvtkpugixml9.1\ 118 lvtkRenderingAnnotation9.1\ 119 lvtkRenderingContext2D9.1\ 120 lvtkRenderingContextOpenGL29.1\ 121 lvtkRenderingCore9.1\ 122 lvtkRenderingFreeType9.1\ 123 lvtkRenderingGL2PSOpenGL29.1\ 124 lvtkRenderingImage9.1\ 125 lvtkRenderingLabel9.1\ 126 lvtkRenderingLOD9.1\ 127 lvtkRenderingOpenGL29.1\ 128 lvtkRenderingQt9.1\ 129 lvtkRenderingSceneGraph9.1\ 130 lvtkRenderingUI9.1\ 131 lvtkRenderingVolume9.1\ 132 lvtkRenderingVolumeOpenGL29.1\ 133 lvtkRenderingVtkJS9.1\ 134 lvtksqlite9.1\ 135 lvtksys9.1\ 136 lvtkTestingRendering9.1\ 137 lvtktheora9.1\ 138 lvtktiff9.1\ 139 lvtkverdict9.1\ 140 lvtkViewsContext2D9.1\ 141 lvtkViewsCore9.1\ 142 lvtkViewsInfovis9.1\ 143 lvtkViewsQt9.1\ 144 lvtkWrappingTools9.1\ 145 lvtkzlib9.1然后执行qmake,并进行编译和运行
三、、控件提升(将一个widget 提升为QVTKOpenGLNativeWidget)
首先在UI界面个widget ,布局成水平布局
运行看一下,没有问题。
QOpenGLWidget允许在平台支持时使用不同的OpenGL版本和配置文件。只需通过setFormat()设置请求的格式。但在同一窗口中有多个QOpenGLWidget,要求它们都使用相同的格式,或者至少不是环境共享的格式。要解决此问题,使用QSurfaceFormat :: setDefaultFormat(),而不是setFormat()。
注意:在请求OpenGL核心配置文件上下文时,在构造QApplication实例之前调用QSurfaceFormat :: setDefaultFormat()在某些平台(例如,macOS)上是必需的。这是为了确保上下文之间的资源共享保持功能,因为所有内部上下文都是使用正确的版本和配置文件创建的
vtkActor:
表示渲染场景中的对象(几何和属性)。
vtkActor用于表示呈现场景中的实体。它继承了vtkProp中与角色位置和方向相关的函数。actor还具有缩放功能,并维护对定义几何的引用(即、呈现属性,可能还有纹理映射。vtkActor将这些实例变量组合成一个4x4转换矩阵
VKT宏初始化:
在使用vtk 之前一定要在前面加上初始化的相关代码,不然程序当中是无法new 出对象的
1 #include "vtkAutoInit.h" // vtk初始化的方式 2 VTK_MODULE_INIT(vtkRenderingOpenGL2); // 渲染 3 VTK_MODULE_INIT(vtkInteractionStyle); // 相互做用方式 4 VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2); // 5 VTK_MODULE_INIT(vtkRenderingFreeType);1 // 获得默认的opengl的配置 2 QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat(true)); 3 vtkNew<vtkNamedColors> colors; 4 vtkNew<vtkSphereSource> shereSource; 5 6 vtkNew<vtkPolyDataMapper> shereMapper; 7 shereMapper>SetInputConnection(shereSource>GetOutputPort()); 8 // 声明一个actor 类,然后使用这个类来显示球体 9 vtkNew<vtkActor> shereActor; 10 shereActor>SetMapper(shereMapper); 11 // 设置颜色 12 shereActor>GetProperty()>SetColor(colors>GetColor4d("Tato").GetData()); 13 // 渲染 14 vtkNew<vtkRenderer> renderer; 15 renderer>AddActor(shereActor); 16 renderer>SetBackground(colors>GetColor3d("SteelBlue").GetData()); 17 // 显示renderer 的窗口 18 vtkNew<vtkGenericOpenGLRenderWindow> renderwindow; 19 20 renderwindow>AddRenderer(renderer); 21 renderwindow>SetWindowName("RenderWindowNoUIFile"); 22 23 24 // 最后开始调用 25 QHBoxLayout * hl=new QHBoxLayout(this); 26 hl>addWidget(ui>qvtkWidget); 27 ui>qvtkWidget>setRenderWindow(renderwindow); 28 setLayout(hl);
下一篇:蔡司激光共聚焦荧光显微镜 (六)
Qt VTK