如何将VTK整合到Qt中(1)? -- 使用cmake管理Qt工程

如何将VTK整合到Qt中(1)? -- 使用cmake管理Qt工程,第1张

如何将VTK整合到Qt中(1)? -- 使用cmake管理Qt工程

作为一个跨平台的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_.cpp的文件。如果宏定义在cpp文件中,则moc将会生成.moc文件。此.moc文件必须要被包含在cpp文件中。包含的 moc_*.cpp 和 *.moc 文件将添加在 /include 目录中,该目录自动添加到 INCLUDE_DIRECTORIES。生成的 ui_*.h 文件放置在 /include 目录中,该目录会自动添加到 INCLUDE_DIRECTORIES。

AUTOUIC决定了cmake是否要检测C++文件来决定其是否需要执行uic命令。如果c++的预处理指令#include 包含了ui_.h并且.ui文件存在,则uic命令将作用到具体的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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5702370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存