作为一个跨平台的GUI开发工具,Qt的优点在这里不再陈述。VTK提供了大量的类来支持Qt,因此把两者整合是相对比较简单的。
VTK是用CMake进行管理的,而Qt本身提供了qmake来编译Qt工程。对于小型项目,使用qmake管理工程的确比较方便。但是对于大型项目来说,使用CMake来管理工程是一个更加明智的选择。
下面我们将看一下如何使用CMake来管理Qt工程,并如何用QVTKWidget整合Qt和VTK
首先我们来看一下当新建一个demo case并且选择cmake作为编译工具时,Qt帮我们创建的最简单的CMAKELists.txt。
cmake_minimum_required(VERSION 3.5) project(VTKImbuedQt 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) find_package(Qt5 COMPonENTS Widgets REQUIRED) add_executable(cmakeProject main.cpp mainwindow.cpp mainwindow.h mainwindow.ui ) target_link_libraries(cmakeProject PRIVATE Qt5::Widgets)
我们可以看到三行代码将CMAKE_AUTOUIC, CMAKE_AUTOMOC, CMAKE_MOC都设置为on。在解释这三行代码之前, 我们可以看一下cmake编译Qt文件时的流程图。
Qt 依赖于一些代码生成工具,例如生成元对象代码 moc,用于小部件布局代码生成的 uic,以及用于虚拟文件系统内容生成的 rcc工具。
AUTOMOC决定了cmake是否要检测C++文件来决定其是否需要执行MOC命令。如果在头文件中发现了AUTOMAC_MACRO_NAMES的宏(比如说Q_Object),则将对此头文件执行moc命令,并且生成moc_
AUTOUIC决定了cmake是否要检测C++文件来决定其是否需要执行uic命令。如果c++的预处理指令#include 包含了ui_
AUTORCC可以将*.qrc资源文件转化为qrc_*.cpp文件,以供后续编译使用。
在add_executable命令调用时,需要我们将SRC,header和UI文件以及qrc资源文件显式声明。
参考:《VTK图形图像开发进阶》张晓东 罗火灵编著
cmake-qt(7) — CMake 3.22.1 documentationhttps://cmake.org/cmake/help/latest/manual/cmake-qt.7.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)