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编译一下即可运行。
阅读全文
0 0
- VTK之基于Qt的VTK应用程序
- 基于VTK的Qt应用程序开发
- 基于VTK&ITK的Qt应用程序开发
- 基于VTK的Qt应用程序开发
- 基于VTK的Qt应用程序开发
- 基于VTK&ITK的Qt应用程序开发
- VTK:基于Qt的VTK右击菜单实现
- 基于VTK的MFC应用程序开发(1)
- 基于VTK的MFC应用程序开发(2)
- 基于VTK的MFC应用程序开发(3)
- 基于VTK的MFC应用程序开发(一)
- 基于VTK的MFC应用程序开发(3)
- 基于VTK的MFC应用程序开发(1)
- 基于VTK的MFC应用程序开发(2)
- 基于VTK的MFC应用程序开发(3)
- 基于VTK的MFC应用程序开发(3)
- 基于VTK的MFC应用程序开发(1)
- 基于VTK的MFC应用程序开发(2)
- Android Bander设计与实现
- FATFS一个小问题搞了我2天才解决.特此发帖,希望大家不要重蹈我的覆辙
- 日历运用模式嵌套 布局 定位
- 链表带环问题【每日一题】
- ES6学习(一)
- VTK之基于Qt的VTK应用程序
- Redhat6.8安装JDK1.8
- hdu个人赛6—1007
- poj3692 Kindergarten【最大独立集】
- #1531:德国心脏病——[Offer收割]编程练习赛18
- linux系统 终端下 cat中文乱码/vim不乱码 或者 cat不乱码/vim中文乱码
- KinectV2的精度和与V1的对比
- 5-25 念数字 (15分)
- Android开发 之 RadialGradient环形渲染