VTK之基于Qt的VTK应用程序

来源:互联网 发布:网狐6603房卡牛牛源码 编辑:程序博客网 时间:2024/05/21 12:08

  友好的用户图形界面是应用程序必须的因素之一,对于VTK应用程序也是如此。VTK附带的程序示例大多数是基于控制台的,但是VTK也可以与很多流行的GUI开发工具整合。本文介绍如何把VTK和GUI开发工具Qt进行整合。

VTK之基于Qt的VTK应用程序

  Qt是跨平台的GUI开发工具,VTK也提供了大量的类支持Qt。VTK工程是用CMake进行管理的,而Qt自身有qmake工具。对于一些规模较小的Qt工程而言,用qmake来构建工程确实很方便,但是随着工程复杂度的增加或者当所开发的工程依赖于其他函数库时,使用CMake来管理工程是一个明智的选择。

用CMake管理Qt工程

下图是Qt编译系统:

这里写图片描述

用CMake来管理 Qt工程的CMakeLists脚本程序:

#----------------------------------------------# 下面这两行,没什么好解释的cmake_minimum_required( VERSION 2.8 )project( YourProjectName )#----------------------------------------------# 下面这两行,也没什么好解释的find_package( Qt5Widgets REQUIRED )include( ${QT_USE_FILE} )#----------------------------------------------# 程序所有源文件。<TODO:在此处添加源文件># 定义变量Project_SRCS,其值为所列的文件列表SET( Project_SRCS    main.cpp  )#----------------------------------------------# 程序所有UI文件。<TODO:在此处添加UI文件># 定义变量Project_UIS,其值为所列的文件列表SET( Project_UIS    YourQtWindows.ui)#----------------------------------------------# 所有包含Q_OBJECT的头文件。<TODO:在此处添加头文件># 定义变量Project_MOC_HDRS,其值为所列的文件列表SET( Project_MOC_HDRS    YourQtProjectFiles.h)#-----------------------------------------------# 通过Qt的uic.exe生成UI文件对应的ui_XXXX.h文件# 将生成的ui_XXXX.h文件放在变量Project_UIS_H里,# QT5_WRAP_UI就是干这个事情。QT5_WRAP_UI( Project_UIS_H ${Project_UIS} )#-----------------------------------------------# 通过Qt的moc.exe生成包含Q_OBJECT的头文件对应的# moc_XXXX.cxx文件,将生成的moc_XXXX.cxx文件放在# 变量Project_MOC_SRCS里。QT5_WRAP_CPP就是干这个事情。QT5_WRAP_CPP( Project_MOC_SRCS ${Project_MOC_HDRS} )#-----------------------------------------------# Qt的MOC和UIC程序生成的moc_XXXX.cxx和ui_XXXX.h# 等文件是存放在CMake的“Where to build the binaries"# 里指定的目录里,所以必须都这些路径包含进来。INCLUDE_DIRECTORIES( ${Project_SOURCE_DIR}                     ${CMAKE_CURRENT_BINARY_DIR}                   )#-----------------------------------------------                          # Qt程序如果有资源文件(*.qrc),要包含资源文件,# 然后用Qt的rcc.exe生成相应的qrc_XXXX.cpp文件。# QT5_ADD_RESOURCES就是干这个事情。SET( Project_RCCS YourProject.qrc)QT5_ADD_RESOURCES( Project_RCC_SRCS ${Project_RCCS})#-----------------------------------------------# 根据程序的cpp文件、头文件以及中间生成的ui_XXXX.h、# moc_XXXX.cxx、qrc_XXXX.cxx等生成可执行文件,并链接# Qt的动态库(Qt的动态库都定义在QT_LIBRARIES变量里了)ADD_EXECUTABLE( YourProjectName                ${Project_SRCS}                ${Project_UIS_H}                ${Project_MOC_SRCS}                ${Project_RCC_SRCS}                                         )TARGET_LINK_LIBRARIES ( YourProjectName  ${Qt5Widgets_LIBRARIES} )

在Qt Designer里继承QVTKWidget控件

  要实现QVTKWidget在Qt Designer里像Qt的其他标准控件的拖拽功能,需要将VTK中编译(必须是Release)生成的QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib复制到Qt安装目录中的plugins\designer下。复制完成后,Qt Designer界面如下图所示。

这里写图片描述

示例演示

本例先用Qt Designer生成ui文件,再整合VTK生成CT数据浏览器。

CMakeLists.txt代码

CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )PROJECT( Qt )#----------------------------------------------------------------------------------FIND_PACKAGE( VTK REQUIRED )FIND_PACKAGE( Qt5Widgets REQUIRED )INCLUDE( ${VTK_USE_FILE} )#----------------------------------------------------------------------------------SET( PROJECT_SRCS    main.cpp    ProjectMainWindow.cpp    )SET( PROJECT_UIS    ProjectMainWindow.ui)SET( PROJECT_MOC_HDRS  ProjectMainWindow.h)#----------------------------------------------------------------------------------QT5_WRAP_UI( PROJECT_UIS_H              ${PROJECT_UIS}           )QT5_WRAP_CPP( PROJECT_MOC_SRCS               ${PROJECT_MOC_HDRS}            )#----------------------------------------------------------------------------------INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}                      ${CMAKE_CURRENT_BINARY_DIR}                      ${VTK_DIR}                    )ADD_EXECUTABLE( Qt                 ${PROJECT_SRCS}                 ${PROJECT_UIS_H}                 ${PROJECT_MOC_SRCS}               )TARGET_LINK_LIBRARIES ( Qt  ${VTK_LIBRARIES}  ${Qt5Widgets_LIBRARIES}   )#-----------------------------------------------------------------------------------------------------------------------------------# Construct a list of paths containing runtime # directories for project applications on WindowsSET(PROJECT_RUNTIME_PATH     "${VTK_LIBRARY_DIRS}/@VS_BUILD_TYPE@;${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/@VS_BUILD_TYPE@"    )IF(QT5_FOUND)  SET(PROJECT_RUNTIME_PATH "${PROJECT_RUNTIME_PATH};${QT_LIBRARY_DIR}/../bin")ENDIF()INCLUDE(CreateWindowsBatchScript.cmake)# If we are under Windows, create two batch files which correctly# set up the environment for the application and for Visual StudioIF(WIN32)  SET(VS_SOLUTION_FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.sln")  FOREACH(VS_BUILD_TYPE debug release)    CreateWindowsBatchScript("${CMAKE_SOURCE_DIR}/StartVS.bat.in"      ${PROJECT_BINARY_DIR}/StartVS_${VS_BUILD_TYPE}.bat      ${VS_BUILD_TYPE})  ENDFOREACH()ENDIF(WIN32)

运行结果:

这里写图片描述

源代码下载,下载后用CMake编译一下即可运行。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 科大讯飞java 1,定义一个接口Assaultable(可攻击的),该接口有一个抽象方法attack()。2,定义一 FlyAudioVoice 2023 编写一个应用程序绘制一个如下的操作菜单并实现功能(定义一个类学生表示学生,有成员变量姓名name和年 Minecraft 1204:剔除相关数 平坦衰落信道2FSK差错性能分析 平坦衰落信道 编写一个应用程序绘制一个如下的操作菜单并实现功能(定义一个类学生表示学生,有成员变量姓名name和年 手机是现在人们必不可少、最重要的通讯工具,拥有一款简单、实用、易用的手机通讯录,将会使你的手机更加好 手机是现在人们必不可少、最重要的通讯工具,拥有一款简单、实用、易用的手机通讯录,将会使你的手机更加好 编写一个应用程序绘制一个如下的操作菜单并实现功能(定义一个类学生表示学生,有成员变量姓名name和年 61858 61850 全国市级城市拼音 pycr rpyc pry 安德地产公司 安德地产年报 pycharm安装 高文 李皓 王煊 赵瀚 夜的命名术 我的治愈系游戏 全职艺术家 星门 长夜余火 不科学御兽 十方武圣 黎明之剑 深空彼岸 稳住别浪 这个人仙太过正经 从红月开始 林渊 时宇 魏合