本文参考了https://blog.csdn.net/Jecklin_online/article/details/82187558的博客,此博客是用vtk实现的,此文是在此基础上增加了qt界面是利用了qt的QVTKWidget来实现的。
1.首先我们必须将QVTKWidget加入到Qt Designer,只需找到编译好的vtk的release版本下的QVTKWidgetPlugin.dll,QVTKWidgetPlugin.exp,QVTKWidgetPlugin.lib放入到自己QT下的designer下即可(我的目录是:F:\Qt\Qt5.5.1\5.5\msvc2013\plugins\designer)
2.写好CmakeLists.txt
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
PROJECT( qt )
#----------------------------------------------------------------------------------
FIND_PACKAGE( VTK REQUIRED )
FIND_PACKAGE( Qt5Widgets )
INCLUDE( ${VTK_USE_FILE} )
#----------------------------------------------------------------------------------
# 定义变量PROJECT_SRCS,其值为所列表的文件列表,包含所有源文件
SET( PROJECT_SRCS
main.cpp
ProjectMainWindow.cpp
ProjectMainWindow.h
)
# 定义变量PROJECT_UIS,其值为所列表的文件列表,包含所有的ui文件
SET( PROJECT_UIS
ProjectMainWindow.ui
)
# 定义变量PROJECT_MOC_HDRS,其值为所列表的文件列表,包含所有Q_OBJECT的头文件
SET( PROJECT_MOC_HDRS
ProjectMainWindow.h
)
#----------------------------------------------------------------------------------
# QT5_WRAP_UI通过QT的uic.exe生成UI文件对应的ui_xxx.h文件,
# 并将生成的moc_xxx.h文件列表存储于变量PROJECT_UIS_H 里
QT5_WRAP_UI( PROJECT_UIS_H
${PROJECT_UIS}
)
# QT5_WRAP_CPP通过QT的moc.exe将包含的Q_OBJECT的文件生成对应的moc_xxx.cxx文件,
# 并将生成的moc_xxx.cxx文件列表存储于变量PROJECT_MOC_SRCS里
QT5_WRAP_CPP( PROJECT_MOC_SRCS
${PROJECT_MOC_HDRS}
)
#----------------------------------------------------------------------------------
# Qt的MOC和UIC程序生成的moc_xxx.cxx和ui.xxx.h等文件是存放在CMAKE的
# where to bulid the binaries 里指定的目录,所以必须把这些路径包含进来
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${VTK_DIR}
)
# Qt程序如果有资源文件(*.qrc),要包含资源文件,
# qt5_add_resources 用的rcc.exe生成相应的qrc_xxx.cpp文件,
# 并将生成的文件列表存储于变量Project_RCC_SRCS里
# set(Project_RCCS YourProjectName.qrc)
# qt5_add_resources(Project_RCCS_SRCS ${Project_RCCS})
# 根据程序的cpp文件、头文件以及生成的ui_xxx.h、moc_xxx.cxx、qrc_xxx.cxx
# 等生成可执行文件,并链接Qt的动态库(Qt的动态都定义在QT_LIBRARIES变量里了)
ADD_EXECUTABLE( qt
${PROJECT_SRCS}
${PROJECT_UIS_H}
${PROJECT_MOC_SRCS}
)
TARGET_LINK_LIBRARIES ( qt
${VTK_LIBRARIES}
#QVTK
)
3.用cmake编译
4.main函数
#include "ProjectMainWindow.h"
#include <QTextCodec>
//程序发布时,可以不要注释以下语句,编译的时候就不会带控制台输出窗口
//#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
int main( int argc, char **argv )
{
QApplication *app = new QApplication