CTK创建插件部分见————使用CMake创建一个最简CTK插件
CTK创建QT插件时使用上述方式创建的是非GUI插件,而对于QT的GUI插件插件,创建时需要使用QWidgets和QGui库,这些库通过修改CMake文件配置失败,理论配置方式如下,并且CMake也成功找到了QT目录下的相应.cmake配置文件,但是最终生成项目中却没有配置好相应的库,原因不明:
打开ctkMacroSetupQt.cmake:
###########################################################################
#
# Library: CTK
#
# Copyright (c) Kitware Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0.txt
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
###########################################################################
#! \ingroup CMakeUtilities
macro(ctkMacroSetupQt)
set(CTK_QT_VERSION "5" CACHE STRING "Expected Qt version")
mark_as_advanced(CTK_QT_VERSION)
set_property(CACHE CTK_QT_VERSION PROPERTY STRINGS 5 4)
if(NOT (CTK_QT_VERSION VERSION_EQUAL "4" OR CTK_QT_VERSION VERSION_EQUAL "5"))
message(FATAL_ERROR "Expected value for CTK_QT_VERSION is either '4' or '5'")
endif()
if(CTK_QT_VERSION VERSION_GREATER "4")
cmake_minimum_required(VERSION 2.8.12)
find_package(Qt5 COMPONENTS Core)
set(CTK_QT5_COMPONENTS Core Xml XmlPatterns Concurrent Sql Test)
if(CTK_ENABLE_Widgets OR CTK_LIB_Widgets OR CTK_LIB_CommandLineModules/Frontend/QtGui OR CTK_BUILD_ALL OR CTK_BUILD_ALL_LIBRARIES)
list(APPEND CTK_QT5_COMPONENTS Widgets OpenGL UiTools)
endif()
if(CTK_LIB_CommandLineModules/Frontend/QtWebKit OR CTK_BUILD_ALL OR CTK_BUILD_ALL_LIBRARIES)
if(TARGET Qt5::WebKitWidgets)
list(APPEND CTK_QT5_COMPONENTS WebKitWidgets)
else()
list(APPEND CTK_QT5_COMPONENTS WebEngineWidgets)
endif()
endif()
if(CTK_LIB_XNAT/Core OR CTK_BUILD_ALL OR CTK_BUILD_ALL_LIBRARIES)
list(APPEND CTK_QT5_COMPONENTS Script)
endif()
find_package(Qt5 COMPONENTS ${CTK_QT5_COMPONENTS} REQUIRED)
mark_as_superbuild(Qt5_DIR) # Qt 5
# XXX Backward compatible way
if(DEFINED CMAKE_PREFIX_PATH)
mark_as_superbuild(CMAKE_PREFIX_PATH) # Qt 5
endif()
else()
set(minimum_required_qt_version "4.6")
find_package(Qt4)
if(QT4_FOUND)
if("${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}" VERSION_LESS "${minimum_required_qt_version}")
message(FATAL_ERROR "error: CTK requires Qt >= ${minimum_required_qt_version} -- you cannot use Qt ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}.")
endif()
set(QT_USE_QTNETWORK ON)
set(QT_USE_QTSQL ON)
set(QT_USE_QTOPENGL ON)
set(QT_USE_QTXML ON)
set(QT_USE_QTXMLPATTERNS ON)
set(QT_USE_QTTEST ${BUILD_TESTING})
include(${QT_USE_FILE})
# Set variable QT_INSTALLED_LIBRARY_DIR that will contains
# Qt shared library
set(QT_INSTALLED_LIBRARY_DIR ${QT_LIBRARY_DIR})
if(WIN32)
get_filename_component(QT_INSTALLED_LIBRARY_DIR ${QT_QMAKE_EXECUTABLE} PATH)
endif()
mark_as_superbuild(QT_QMAKE_EXECUTABLE) # Qt 4
else()
message(FATAL_ERROR "error: Qt4 was not found on your system. You probably need to set the QT_QMAKE_EXECUTABLE variable")
endif()
endif()
mark_as_superbuild(CTK_QT_VERSION)
endmacro()
在set(CTK_QT5_COMPONENTS Core Xml XmlPatterns Concurrent Sql Test)项添加Gui Widgets项,即:
- 改:set(CTK_QT5_COMPONENTS Core Xml XmlPatterns Concurrent Sql Test)
- 为:set(CTK_QT5_COMPONENTS Core Gui Widgets Xml XmlPatterns Concurrent Sql Test)
由于下面有对Widgets项的添加,为了避免重复添加,对其添加注释:
- #if(CTK_ENABLE_Widgets OR CTK_LIB_Widgets OR CTK_LIB_CommandLineModules/Frontend/QtGui OR CTK_BUILD_ALL OR CTK_BUILD_ALL_LIBRARIES)
- #list(APPEND CTK_QT5_COMPONENTS Widgets OpenGL UiTools)
- #endif()
修改完成后执行CMake,可以发现在CMake的GUI界面找到并显示了QT对Core Gui Widgets Xml XmlPatterns Concurrent Sql Test相应的.cmake配置文件,但是最终生产项目并没有将改对应库添加到项目,原因在之后查询。
但是可以在CTK生成成功后(有一项会失败,就是这个GUI插件,但是项目已经构建,只是生成失败),打开该GUI插件工程,手动在插件项目中添加:
include目录:
- C:\Qt\Qt5.7.1\5.7\msvc2015\include\QtANGLE
- C:\Qt\Qt5.7.1\5.7\msvc2015\include\QtGui
- C:\Qt\Qt5.7.1\5.7\msvc2015\include\QtWidgets
链接器附加依赖性:
Debug模式下:
- C:\Qt\Qt5.7.1\5.7\msvc2015\lib\Qt5Guid.lib
- C:\Qt\Qt5.7.1\5.7\msvc2015\lib\Qt5Widgetsd.lib
Release模式下:
- C:\Qt\Qt5.7.1\5.7\msvc2015\lib\Qt5Gui.lib
- C:\Qt\Qt5.7.1\5.7\msvc2015\lib\Qt5Widgets.lib
添加后单独编译该插件可以生成Qt带哟gui部分的插件,但是该生成方式只用于GUI使用代码编写,ui文件如何使用尚不明确