【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 配合 Qt 构建 VTK
4 【VTK】官方示例,移植到自己的 Qt 工程,含代码

关于更多此例子的资料,可以参考:【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

完成了使用 Qt 来显示一个小球的例子后,我还尝试从 VTK 官网上下载了一个例子,然后自己尝试着将其移植到了自己的 Qt 工程中,感兴趣可以看:【VTK】官方示例,移植到自己的 Qt 工程,含代码

文章目录

版本环境

版本环境为:

  • win11
  • visual studio 2022
  • VTK-9.2.6
  • CMake 3.26.3
  • Qt 6.2.8

VTKTest.ui

VTKTest.h

cpp 复制代码
#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_VTKTest.h"

#include <qsurfaceformat.h>
#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"

class VTKTest : public QMainWindow
{
    Q_OBJECT

public:
    VTKTest(QWidget* parent = nullptr);
    //VTKTest(QWidget* parent = Q_NULLPTR);
    ~VTKTest();

private slots:
    void on_pushButton_clicked();

private:
    Ui::VTKTestClass ui;
};

VTKTest.cpp

cpp 复制代码
#include "VTKTest.h"

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

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

VTKTest::~VTKTest()
{}

void VTKTest::on_pushButton_clicked()
{
    QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());
    //QVTKOpenGLNativeWidget* widget = new QVTKOpenGLNativeWidget();

    vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New();

    vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();

    vtkSmartPointer<vtkPolyDataMapper> sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();

    sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
    vtkSmartPointer<vtkActor> sphereActor = vtkSmartPointer<vtkActor>::New();

    sphereActor->SetMapper(sphereMapper);
    sphereActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());

    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(sphereActor);
    renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());

    vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    renderWindow->SetWindowName("RenderWindowNoUIFile");

    ui.qvtkWidget->setRenderWindow(renderWindow);
    ui.qvtkWidget->resize(200, 160);
    ui.qvtkWidget->show();

}

main.cpp

cpp 复制代码
#include "VTKTest.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    VTKTest w;
    w.show();
    return a.exec();
}

运行结果

Ref.

  1. QVTKOpenGLNativeWidget在Qt中的用法
  2. VTK+Qt的第一个例子
  3. C++ 泛型编程
  4. C++ 模板
  5. C语言带参数的宏定义
相关推荐
C++ 老炮儿的技术栈6 小时前
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
c语言·c++·windows·git·vscode·visual studio
pVPkTAeVGPdZ8 小时前
码垛机器人分析与仿真:基于Matlab Simulink Simscape的探索
windows
一点事9 小时前
windows:安装rabbitMQ
windows·rabbitmq·ruby
SunkingYang9 小时前
Windows系统怎么修改系统文件如user32.dll的控制权限(无法保存对xxx权限所做的更改,拒绝访问,怎么处理)
windows·系统文件·控制权限修改·无法保存·拒绝访问
yaoxin5211239 小时前
296. Java Stream API - 二元操作符与“单位元“
java·服务器·windows
用什么都重名10 小时前
Conda 虚拟环境安装配置路径详解
windows·python·conda
万行13 小时前
企业级前后端认证方式
前端·windows
cws20040114 小时前
MFA双因素用户使用手册
运维·windows·网络安全·github·邮件·邮箱
少控科技14 小时前
QT新手日记028 QT-QML所有类型
开发语言·qt
billy_gisboy15 小时前
01-Windows+DockerDesktop部署ClickHouse
windows·clickhouse