From 1b87f615ce0e7125ec739bc3e40d8ff7f6783587 Mon Sep 17 00:00:00 2001 From: Vyacheslav Tyrtov Date: Wed, 19 Apr 2023 23:27:06 +0100 Subject: [PATCH 1/2] Make plugins code compliant to Qt6 --- AffineTransformations/CMakeLists.txt | 4 ++-- .../src/DkAffineTransformationsPlugin.json | 2 +- AffineTransformations/src/DkImgTransformationsPlugin.cpp | 1 + AffineTransformations/src/DkImgTransformationsPlugin.h | 4 ++-- AffineTransformations/src/DkSkewEstimator.cpp | 3 ++- CompositePlugin/CMakeLists.txt | 4 ++-- CompositePlugin/src/SbChannelWidget.cpp | 6 +++++- CompositePlugin/src/SbChannelWidget.h | 4 +++- CompositePlugin/src/SbCompositePlugin.json | 2 +- FakeMiniaturesPlugin/CMakeLists.txt | 4 ++-- FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.cpp | 2 +- FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.h | 4 ++-- FakeMiniaturesPlugin/src/DkFakeMiniaturesPlugin.json | 2 +- PageExtractionPlugin/CMakeLists.txt | 4 ++-- PageExtractionPlugin/src/DkPageExtractionPlugin.json | 2 +- PaintPlugin/CMakeLists.txt | 4 ++-- PaintPlugin/src/DkPaintPlugin.cpp | 2 +- PaintPlugin/src/DkPaintPlugin.json | 2 +- SIMPLE_PLUGIN/CMakeLists.txt | 2 +- 19 files changed, 33 insertions(+), 25 deletions(-) diff --git a/AffineTransformations/CMakeLists.txt b/AffineTransformations/CMakeLists.txt index 0fdd0ea..c3e2563 100644 --- a/AffineTransformations/CMakeLists.txt +++ b/AffineTransformations/CMakeLists.txt @@ -51,12 +51,12 @@ ADD_DEFINITIONS(-DQT_SHARED) ADD_DEFINITIONS(-DQT_DLL) # QT5_WRAP_CPP(PLUGIN_MOC_SRC ${PLUGIN_MOCS}) -QT5_ADD_RESOURCES(PLUGIN_RCC ${PLUGIN_RESOURCES}) +qt_add_resources(PLUGIN_RCC ${PLUGIN_RESOURCES}) link_directories(${OpenCV_LIBRARY_DIRS} ${NOMACS_BUILD_DIRECTORY}/libs ${NOMACS_BUILD_DIRECTORY}) ADD_LIBRARY(${PROJECT_NAME} SHARED ${PLUGIN_SOURCES} ${PLUGIN_MOC_SRC} ${PLUGIN_RCC} ${PLUGIN_HEADERS}) target_link_libraries(${PROJECT_NAME} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTMAIN_LIBRARY} ${OpenCV_LIBS} ${NOMACS_LIBS}) -target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Gui) +target_link_libraries(${PROJECT_NAME} Qt::Widgets Qt::Gui) NMC_CREATE_TARGETS() NMC_GENERATE_USER_FILE() diff --git a/AffineTransformations/src/DkAffineTransformationsPlugin.json b/AffineTransformations/src/DkAffineTransformationsPlugin.json index 73967e1..0624556 100644 --- a/AffineTransformations/src/DkAffineTransformationsPlugin.json +++ b/AffineTransformations/src/DkAffineTransformationsPlugin.json @@ -3,7 +3,7 @@ "AuthorName" : "Tim Jerman", "Company" : "", "DateCreated" : "2014-06-01", - "DateModified" : "2020-08-19", + "DateModified" : "2023-04-23", "Description" : "Apply affine transformations to the selected image. The available transformations are: scale, rotation (with automatic skewness detection), and shear.", "Tagline" : "Transform and rotate images", "PluginId" : "7a4a50a45ddb408ba46a16a40e6518fd", diff --git a/AffineTransformations/src/DkImgTransformationsPlugin.cpp b/AffineTransformations/src/DkImgTransformationsPlugin.cpp index 0847cb6..70670cc 100644 --- a/AffineTransformations/src/DkImgTransformationsPlugin.cpp +++ b/AffineTransformations/src/DkImgTransformationsPlugin.cpp @@ -33,6 +33,7 @@ #include "DkUtils.h" #include "DkToolbars.h" +#include #include #define PI 3.14159265 diff --git a/AffineTransformations/src/DkImgTransformationsPlugin.h b/AffineTransformations/src/DkImgTransformationsPlugin.h index 911d237..0b4fc14 100644 --- a/AffineTransformations/src/DkImgTransformationsPlugin.h +++ b/AffineTransformations/src/DkImgTransformationsPlugin.h @@ -268,8 +268,8 @@ class DkInteractionRects : public QWidget { public: - DkInteractionRects(QRect imgRect, QWidget* parent = 0, Qt::WindowFlags f = 0); - DkInteractionRects(QWidget* parent = 0, Qt::WindowFlags f = 0); + DkInteractionRects(QRect imgRect, QWidget* parent = 0, Qt::WindowFlags f = Qt::Widget); + DkInteractionRects(QWidget* parent = 0, Qt::WindowFlags f = Qt::Widget); ~DkInteractionRects(); void draw(QPainter* painter); diff --git a/AffineTransformations/src/DkSkewEstimator.cpp b/AffineTransformations/src/DkSkewEstimator.cpp index 7b0fb9c..eb0bb51 100644 --- a/AffineTransformations/src/DkSkewEstimator.cpp +++ b/AffineTransformations/src/DkSkewEstimator.cpp @@ -29,6 +29,7 @@ #include "DkImageStorage.h" #include +#include namespace nmp { @@ -301,7 +302,7 @@ cv::Mat DkSkewEstimator::computeEdgeMap(cv::Mat separability, double thr, int di int DkSkewEstimator::randInt(int low, int high) { - return qrand() % ((high + 1) - low) + low; + return QRandomGenerator::global()->bounded(low, high); } QVector DkSkewEstimator::computeWeights(cv::Mat edgeMap, int direction) { diff --git a/CompositePlugin/CMakeLists.txt b/CompositePlugin/CMakeLists.txt index 1933296..8cfb865 100644 --- a/CompositePlugin/CMakeLists.txt +++ b/CompositePlugin/CMakeLists.txt @@ -47,12 +47,12 @@ ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_SHARED) ADD_DEFINITIONS(-DQT_DLL) -QT5_ADD_RESOURCES(PLUGIN_RCC ${PLUGIN_RESOURCES}) +qt_add_resources(PLUGIN_RCC ${PLUGIN_RESOURCES}) link_directories(${OpenCV_LIBRARY_DIRS} ${NOMACS_BUILD_DIRECTORY}/libs ${NOMACS_BUILD_DIRECTORY}) ADD_LIBRARY(${PROJECT_NAME} SHARED ${PLUGIN_SOURCES} ${PLUGIN_MOC_SRC} ${PLUGIN_RCC} ${PLUGIN_HEADERS}) target_link_libraries(${PROJECT_NAME} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTMAIN_LIBRARY} ${OpenCV_LIBS} ${NOMACS_LIBS}) -target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Gui Qt5::Network) +target_link_libraries(${PROJECT_NAME} Qt::Widgets Qt::Gui Qt::Network) NMC_CREATE_TARGETS() NMC_GENERATE_USER_FILE() diff --git a/CompositePlugin/src/SbChannelWidget.cpp b/CompositePlugin/src/SbChannelWidget.cpp index 51b6b3d..294b249 100644 --- a/CompositePlugin/src/SbChannelWidget.cpp +++ b/CompositePlugin/src/SbChannelWidget.cpp @@ -37,11 +37,15 @@ namespace nmc { if (couldLoad) { QImage qImg = bl.image(); if (qImg.hasAlphaChannel()) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) emit newAlpha(qImg.alphaChannel()); //aparently alphaChannel() is obsolete, however I don't know what else to use +#endif //emit newAlpha(qImg.convertToFormat(QImage::Format_Alpha8)); //because that doesn't seem to work as expected.. } else { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) emit newAlpha(QImage()); +#endif } //this is optional; markus says it makes the grayscale image nicer @@ -170,4 +174,4 @@ namespace nmc { emit imageChanged(c); } } -}; \ No newline at end of file +}; diff --git a/CompositePlugin/src/SbChannelWidget.h b/CompositePlugin/src/SbChannelWidget.h index be14a5e..f2f6fdd 100644 --- a/CompositePlugin/src/SbChannelWidget.h +++ b/CompositePlugin/src/SbChannelWidget.h @@ -102,8 +102,10 @@ namespace nmc { signals: void imageChanged(int channel); // whenever there is an update (actual image change, inversion, intensity) +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) void newAlpha(QImage alpha); // is emitted upon image loading +#endif }; -}; \ No newline at end of file +}; diff --git a/CompositePlugin/src/SbCompositePlugin.json b/CompositePlugin/src/SbCompositePlugin.json index 1f0e880..a11130c 100644 --- a/CompositePlugin/src/SbCompositePlugin.json +++ b/CompositePlugin/src/SbCompositePlugin.json @@ -5,7 +5,7 @@ "AuthorName" : "Simon Brenner", "Company" : "TU Wien, Computer Vision Lab", "DateCreated" : "2020-06-10", - "DateModified" : "2020-08-19", + "DateModified" : "2023-04-23", "PluginId" : "5414075eeff248e4be909635701494bf", "Version" : "0.1.0" } \ No newline at end of file diff --git a/FakeMiniaturesPlugin/CMakeLists.txt b/FakeMiniaturesPlugin/CMakeLists.txt index 8da5ac9..edad877 100644 --- a/FakeMiniaturesPlugin/CMakeLists.txt +++ b/FakeMiniaturesPlugin/CMakeLists.txt @@ -46,12 +46,12 @@ ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_SHARED) ADD_DEFINITIONS(-DQT_DLL) -QT5_ADD_RESOURCES(PLUGIN_RCC ${PLUGIN_RESOURCES}) +qt_add_resources(PLUGIN_RCC ${PLUGIN_RESOURCES}) link_directories(${OpenCV_LIBRARY_DIRS} ${NOMACS_BUILD_DIRECTORY}/libs ${NOMACS_BUILD_DIRECTORY}) ADD_LIBRARY(${PROJECT_NAME} SHARED ${PLUGIN_SOURCES} ${PLUGIN_MOC_SRC} ${PLUGIN_RCC} ${PLUGIN_HEADERS}) target_link_libraries(${PROJECT_NAME} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTMAIN_LIBRARY} ${OpenCV_LIBS} ${NOMACS_LIBS}) -target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Gui) +target_link_libraries(${PROJECT_NAME} Qt::Widgets Qt::Gui) NMC_CREATE_TARGETS() NMC_GENERATE_USER_FILE() diff --git a/FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.cpp b/FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.cpp index 42e0ebc..557f5de 100644 --- a/FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.cpp +++ b/FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.cpp @@ -477,7 +477,7 @@ void DkPreviewLabel::mouseReleaseEvent(QMouseEvent *e) { QLabel::mouseReleaseEvent(e); }; -void DkPreviewLabel::enterEvent(QEvent * e){ +void DkPreviewLabel::enterEvent(QEnterEvent * e){ showROI = true; repaint(); QLabel::enterEvent(e); diff --git a/FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.h b/FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.h index 1f673ce..f3d2285 100644 --- a/FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.h +++ b/FakeMiniaturesPlugin/src/DkFakeMiniaturesDialog.h @@ -196,7 +196,7 @@ class DkPreviewLabel : public QLabel void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e); - void enterEvent(QEvent * e); + void enterEvent(QEnterEvent * e); void leaveEvent(QEvent * e); private: @@ -266,4 +266,4 @@ class DkSaturation : public DkFakeMiniaturesToolWidget { ~DkSaturation(); }; -}; \ No newline at end of file +}; diff --git a/FakeMiniaturesPlugin/src/DkFakeMiniaturesPlugin.json b/FakeMiniaturesPlugin/src/DkFakeMiniaturesPlugin.json index b43689d..73a9dbd 100644 --- a/FakeMiniaturesPlugin/src/DkFakeMiniaturesPlugin.json +++ b/FakeMiniaturesPlugin/src/DkFakeMiniaturesPlugin.json @@ -3,7 +3,7 @@ "AuthorName" : "Tim Jerman", "Company" : "", "DateCreated" : "2014-06-01", - "DateModified" : "2020-08-19", + "DateModified" : "2023-04-23", "Description" : "On the preview image select (by mouse click move and release) the region without blurring. A blur is applyied depending on the distance from this region. The amount of blur and saturation can be changed with the sliders on the right of the dialog.", "Tagline" : "Apply a fake miniature filter (tilt shift effect) to the image.", "PluginId" : "a2ac7b68866b4ab29fb1df3e170b8f0d", diff --git a/PageExtractionPlugin/CMakeLists.txt b/PageExtractionPlugin/CMakeLists.txt index b4ff33b..aba6bc0 100644 --- a/PageExtractionPlugin/CMakeLists.txt +++ b/PageExtractionPlugin/CMakeLists.txt @@ -49,12 +49,12 @@ ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_SHARED) ADD_DEFINITIONS(-DQT_DLL) -QT5_ADD_RESOURCES(PLUGIN_RCC ${PLUGIN_RESOURCES}) +qt_add_resources(PLUGIN_RCC ${PLUGIN_RESOURCES}) link_directories(${OpenCV_LIBRARY_DIRS} ${NOMACS_BUILD_DIRECTORY}/libs ${NOMACS_BUILD_DIRECTORY}) ADD_LIBRARY(${PROJECT_NAME} SHARED ${PLUGIN_SOURCES} ${PLUGIN_MOC_SRC} ${PLUGIN_RCC} ${PLUGIN_HEADERS}) target_link_libraries(${PROJECT_NAME} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTMAIN_LIBRARY} ${OpenCV_LIBS} ${NOMACS_LIBS}) -target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Gui) +target_link_libraries(${PROJECT_NAME} Qt::Widgets Qt::Gui) NMC_CREATE_TARGETS() NMC_GENERATE_USER_FILE() diff --git a/PageExtractionPlugin/src/DkPageExtractionPlugin.json b/PageExtractionPlugin/src/DkPageExtractionPlugin.json index d0f056c..c4cd4bb 100644 --- a/PageExtractionPlugin/src/DkPageExtractionPlugin.json +++ b/PageExtractionPlugin/src/DkPageExtractionPlugin.json @@ -3,7 +3,7 @@ "AuthorName" : "Markus Diem, Thomas Lang", "Company" : "Computer Vision Lab", "DateCreated" : "2015-08-27", - "DateModified" : "2020-08-19", + "DateModified" : "2023-04-23", "Description" : "This plugin detects document pages and either crops the image accordingly or annotates the region.", "Tagline" : "Detect document pages in images", "PluginId" : "4acb88c461024cb080ae5cd15d0ef0ec", diff --git a/PaintPlugin/CMakeLists.txt b/PaintPlugin/CMakeLists.txt index 3301d42..a6cd3c5 100644 --- a/PaintPlugin/CMakeLists.txt +++ b/PaintPlugin/CMakeLists.txt @@ -45,12 +45,12 @@ ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_SHARED) ADD_DEFINITIONS(-DQT_DLL) -QT5_ADD_RESOURCES(PLUGIN_RCC ${PLUGIN_RESOURCES}) +qt_add_resources(PLUGIN_RCC ${PLUGIN_RESOURCES}) link_directories(${OpenCV_LIBRARY_DIRS} ${NOMACS_BUILD_DIRECTORY}/libs ${NOMACS_BUILD_DIRECTORY}) ADD_LIBRARY(${PROJECT_NAME} SHARED ${PLUGIN_SOURCES} ${PLUGIN_MOC_SRC} ${PLUGIN_RCC} ${PLUGIN_HEADERS}) target_link_libraries(${PROJECT_NAME} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTMAIN_LIBRARY} ${OpenCV_LIBS} ${NOMACS_LIBS}) -target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Gui) +target_link_libraries(${PROJECT_NAME} Qt::Widgets Qt::Gui) NMC_CREATE_TARGETS() NMC_GENERATE_USER_FILE() diff --git a/PaintPlugin/src/DkPaintPlugin.cpp b/PaintPlugin/src/DkPaintPlugin.cpp index f4f7f20..031298a 100644 --- a/PaintPlugin/src/DkPaintPlugin.cpp +++ b/PaintPlugin/src/DkPaintPlugin.cpp @@ -28,6 +28,7 @@ #include "DkPaintPlugin.h" #include "DkToolbars.h" +#include #include #include @@ -480,7 +481,6 @@ QImage DkPaintViewPort::getPaintedImage() { //if (worldMatrix) // painter.setWorldTransform(*worldMatrix); - painter.setRenderHint(QPainter::HighQualityAntialiasing); painter.setRenderHint(QPainter::Antialiasing); for (int idx = 0; idx < paths.size(); idx++) { diff --git a/PaintPlugin/src/DkPaintPlugin.json b/PaintPlugin/src/DkPaintPlugin.json index 62ef6df..e8f551f 100644 --- a/PaintPlugin/src/DkPaintPlugin.json +++ b/PaintPlugin/src/DkPaintPlugin.json @@ -3,7 +3,7 @@ "AuthorName" : "Tim Jerman", "Company" : "", "DateCreated" : "2014-05-01", - "DateModified" : "2020-08-19", + "DateModified" : "2023-04-23", "Description" : "Paint on an image. The color, size and opacity of the brush can be changed.", "Tagline" : "Draw with adjustable brushes to an image.", "PluginId" : "ad970ef36cc24737afd2b53ad015ff0d", diff --git a/SIMPLE_PLUGIN/CMakeLists.txt b/SIMPLE_PLUGIN/CMakeLists.txt index db0bf53..96a2946 100644 --- a/SIMPLE_PLUGIN/CMakeLists.txt +++ b/SIMPLE_PLUGIN/CMakeLists.txt @@ -52,7 +52,7 @@ QT5_ADD_RESOURCES(PLUGIN_RCC ${PLUGIN_RESOURCES}) link_directories(${OpenCV_LIBRARY_DIRS} ${NOMACS_BUILD_DIRECTORY}/libs ${NOMACS_BUILD_DIRECTORY}) ADD_LIBRARY(${PROJECT_NAME} SHARED ${PLUGIN_SOURCES} ${PLUGIN_MOC_SRC} ${PLUGIN_RCC} ${PLUGIN_HEADERS}) target_link_libraries(${PROJECT_NAME} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTMAIN_LIBRARY} ${OpenCV_LIBS} ${NOMACS_LIBS}) -target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Gui) +target_link_libraries(${PROJECT_NAME} Qt::Widgets Qt::Gui) NMC_CREATE_TARGETS() NMC_GENERATE_USER_FILE() From a869962f051504dd2c1dedeb3bc3d266c17070c1 Mon Sep 17 00:00:00 2001 From: Vyacheslav Tyrtov Date: Sun, 23 Apr 2023 17:26:55 +0100 Subject: [PATCH 2/2] Enable Qt6 build for pluging Tested with Linux build --- cmake/Utils.cmake | 55 ++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake index 5578aa7..da263b1 100644 --- a/cmake/Utils.cmake +++ b/cmake/Utils.cmake @@ -6,26 +6,41 @@ endmacro(NMC_POLICY) macro(NMC_FINDQT) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC OFF) - - set(CMAKE_INCLUDE_CURRENT_DIR ON) - - if(NOT QT_QMAKE_EXECUTABLE) - find_program(QT_QMAKE_EXECUTABLE NAMES "qmake" "qmake-qt5" "qmake.exe") - endif() - if(NOT QT_QMAKE_EXECUTABLE) - message(FATAL_ERROR "you have to set the path to the Qt5 qmake executable") - endif() - message(STATUS "QMake found: ${QT_QMAKE_EXECUTABLE}") - - GET_FILENAME_COMPONENT(QT_QMAKE_PATH ${QT_QMAKE_EXECUTABLE} PATH) - set(QT_ROOT ${QT_QMAKE_PATH}/) - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QT_QMAKE_PATH}\\..\\lib\\cmake\\Qt5) - find_package(Qt5 REQUIRED Widgets Network LinguistTools PrintSupport Concurrent Gui Svg) - if (NOT Qt5_FOUND) - message(FATAL_ERROR "Qt5Widgets not found. Check your QT_QMAKE_EXECUTABLE path and set it to the correct location") - endif() - add_definitions(-DQT5) - + + if(CMAKE_VERSION VERSION_LESS "3.7.0") + set(CMAKE_INCLUDE_CURRENT_DIR ON) + endif() + + if (MSVC) + if(NOT QT_QMAKE_EXECUTABLE) + find_program(QT_QMAKE_EXECUTABLE NAMES "qmake" "qmake-qt5" "qmake.exe") + endif() + if(NOT QT_QMAKE_EXECUTABLE) + message(FATAL_ERROR "you have to set the path to the Qt5 qmake executable") + endif() + + message(STATUS "QMake found: ${QT_QMAKE_EXECUTABLE}") + get_filename_component(QT_QMAKE_PATH ${QT_QMAKE_EXECUTABLE} PATH) + endif() + + if (NOT DEFINED QT_VERSION_MAJOR) + find_package(QT NAMES Qt6 Qt5 REQAUIRED COMPONENTS Core) + endif() + + find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network LinguistTools PrintSupport Concurrent Gui Svg) + + if (${QT_VERSION_MAJOR} VERSION_GREATER_EQUAL "6") + find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core5Compat) + endif() + + if (NOT Qt${QT_VERSION_MAJOR}_FOUND) + message(FATAL_ERROR "Qt Libraries not found!") + endif() + + if (MSVC) + find_package(Qt5 ${QT5_MIN_VERSION} REQUIRED WinExtras) + endif() + endmacro(NMC_FINDQT) macro(NMC_FIND_OPENCV)