1、VTK+QT + cmake编程 三维圆柱体

效果图

一、VTK环境变量设置

添加VTK用户变量,添加完之后重启电脑让环境变量生效

变量:VTK_DIR

值:VTK所在目录

作用为了让cmake能够找到VTK

二、QT Creator 5.12.9新建cmake项目

QT新建项目,选择Qt Widget Application,默认Buid System是qmake

这里我们改为CMake

三、修改CMakeLists.txt文件引入VTK库

按红框添加,作用是查找VTK,和链接VTK库

链接VTK库的时候,会自动引入VTK头文件

cpp 复制代码
cmake_minimum_required(VERSION 3.5)

project(untitled LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(VTK REQUIRED)

if(ANDROID)
  add_library(untitled SHARED
    main.cpp
    MainWindow.cpp
    MainWindow.h
    MainWindow.ui
  )
else()
  add_executable(untitled
    main.cpp
    MainWindow.cpp
    MainWindow.h
    MainWindow.ui
  )
endif()

target_link_libraries(untitled PRIVATE Qt5::Widgets ${VTK_LIBRARIES})

四、写一个最简单的圆柱体VTKDemo

main.cpp

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

#include <QApplication>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkSmartPointer.h>
#include <vtkCylinderSource.h>
#include <vtkActor.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkProperty.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();

    auto wd = new QVTKOpenGLNativeWidget();

    auto cylinder = vtkSmartPointer<vtkCylinderSource>::New();
    cylinder->SetRadius(3);
    cylinder->SetHeight(5);
    cylinder->SetResolution(50); // 分辨率

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

    auto actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    actor->GetProperty()->SetColor(0.9, 0.3, 0); // 红色

    auto render = vtkSmartPointer<vtkRenderer>::New();
    render->AddActor(actor);
    render->SetBackground(0, 0.2, 0.8); // 蓝色

    wd->renderWindow()->AddRenderer(render);


    wd->show();


    return a.exec();
}
相关推荐
程与留20 小时前
06_Qt 常用数据类型与容器:QString、QList、QVector、QMap 的性能与实现分析
数据结构·qt
zlinear数据采集卡1 天前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview
skr爱码士1 天前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt·系统架构·客户端
MOONICK1 天前
QT的UI开发框架
qt·ui
郝学胜-神的一滴1 天前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl
NO12121 天前
python pyqt5調用攝像頭實時顯示
开发语言·python·qt
丰锋ff2 天前
基于 Qt 的智慧社区物业管理系统
开发语言·qt
程与留2 天前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt
buhuizhiyuci2 天前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
Littlehero_1212 天前
QT自定义控件之热换站系统(源码开源)
开发语言·qt