開發圖形相關的軟件時,qt+vtk是一個不錯的搭配,qt負責gui,vtk負責底層圖形渲染。初步嘗試用cmake來構建解決方案,cmakelists.txt如下。
cmake_minimum_required(VERSION 3.3) project(testproject) # Instruct CMake to run moc automatically when needed set(CMAKE_AUTOMOC ON) # Create code from a list of Qt designer ui files set(CMAKE_AUTOUIC ON) # cmake通常找不到qt5的路徑,這里手動設置一下吧,當然也可以在cmake-gui上根據報錯的提示來設置 #set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "c:\\Qt\\Qt5.12.2\\5.12.2\\msvc2017_64\\lib\\cmake\\Qt5") # Find the needed Qt libraries find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) # VTK相關target find_package(VTK REQUIRED) # 該命令是必須的,否則構建出的項目運行時會有初始化的問題 include(${VTK_USE_FILE}) # support for out-of-source build INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) # Populate a CMake variable with the sources set(SRC test.h test.cpp test.ui test.qrc main.cpp ) set(UI test.ui) set(RCC test.qrc) # Assign filters. Optional, but useful. # 對於使用visiual studio加qt-vsaddin開發來說,形成相應的過濾器 source_group("Form Files" FILES ${UI}) source_group("Resource Files" FILES ${RCC}) # 讓這個過濾器為空吧。因為用vs+vsaddin直接建立qt項目時,會產生這個過濾器,但也不會自動添加產生的moc文件,不知道原因, # 因此就空着吧。 source_group("Generated Files") # 添加target的所有相關源文件 # WIN32也是必須的,This makes it a GUI executable instead of a console application. add_executable(testproject WIN32 ${SRC}) # 添加target對QT和VTK的所有依賴庫,包括相應的頭文件,這里會自動識別。 target_link_libraries(testproject ${QT_LIBRARIES} ${VTK_LIBRARIES})
可以成功生成qt+vtk的visiual studio解決方案。但存在一個問題,生成的項目和vs直接新建的qt項目不同,沒有帶有qt相關的信息,例如在項目上點右鍵,沒有qt相關的信息,例如添加class等。這條路適合打包已有完整的解決方案,但不太適合從零開始構建一個項目。
其實想想也正常,cmake只負責qt和vtk形成visiual studio的解決方案,而vs和qt的項目屬性級別的深度集成是 Qt VS Tools(qt-vsaddin)負責的,cmake無從知道這些信息。