系列文章目录
文章目录
前言
又有同学提出新需求:只需要VTK,并且希望在Qtcreator里写代码,这不简简单单,我又整了一个一键配置VTK的小工具。下载的文件在文末~
一、VTK是什么?
可视化工具包 (VTK) 是用于处理和显示科学数据的开源软件。它配备了用于 3D 渲染的最先进的工具、一套用于 3D 交互的小部件以及广泛的 2D 绘图功能。
VTK 是 Kitware支持的软件开发平台集合的一部分。该平台在全球范围内用于商业应用以及研发。
二、配置环境
双击Setup.bat,等待终端运行完成即完成VTK在Qt的环境配置~
三、测试代码
1.项目文件.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
include(.\VTK8_2.pri)
2.main.cpp
代码如下(示例):
#include "mainwindow.h"
#include <vtkOutputWindow.h>
#include <QApplication>
int main(int argc, char *argv[])
{
vtkOutputWindow::SetGlobalWarningDisplay(0);
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
3.mainwindow.cpp
代码如下(示例):
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSurfaceFormat>
#include <QVTKOpenGLNativeWidget.h>
#include <QVTKOpenGLWidget.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 <vtkCubeSource.h>
#include <vtkOutputWindow.h>
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//
// 创建一个立方体源
vtkSmartPointer<vtkCubeSource> cubeSource = vtkSmartPointer<vtkCubeSource>::New();
// 创建一个映射器,将立方体源连接到渲染管线
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(cubeSource->GetOutputPort());
// 创建一个演员,并将映射器连接到演员
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// 创建一个渲染器,并将演员添加到渲染器中
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
// 创建一个渲染窗口,并将渲染器添加到窗口中
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetWindowName("RenderWindowNoUIFile");
setCentralWidget(ui->qvtkWidget);
ui->qvtkWidget->SetRenderWindow(renderWindow);
}
MainWindow::~MainWindow()
{
delete ui;
}
4.mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
5.mainwindow.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QVTKWidget" name="qvtkWidget" native="true">
<property name="geometry">
<rect>
<x>130</x>
<y>50</y>
<width>291</width>
<height>221</height>
</rect>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>17</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<customwidgets>
<customwidget>
<class>QVTKWidget</class>
<extends>QWidget</extends>
<header>QVTKWidget.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
结果演示
总结
一键配置VTK
需要的文件点这里下载~