Ich versuche, eine OpenCV-Anwendung zu schreiben, die die GUI mit Qt erstellt und die Makefiles mit CMake erzeugt. Das Problem, das ich habe, ist, dass, wenn ich versuche, den make
Befehl auszuführen, habe ich den Fehler:Qt Moc Fehler mit CMake
This file was generated using the moc from 5.2.1. It cannot be used with the include files from this version of Qt. (The moc has changed too much.)
Okay. Also ich denke, ich sollte versuchen, die Moc von Qt4 statt Qt5 dafür zu verwenden (ich habe sowohl Qt4 als auch Qt5 installiert). Sicher genug habe ich /usr/bin/moc-qt4
sowie /usr/bin/moc
, so hätte ich gedacht, alles, was ich tun muss, ist invoke sudo update-alternatives --config moc
, aber alles, was ich bekomme, ist update-alternatives: error: no alternatives for moc
. Hmmm ...
Also ich denke, das Problem ist entweder mit der Version von qt oder in meinem CMakeLists.txt
, also hier ist der Code, den ich dafür verwendet:
cmake_minimum_required(VERSION 2.8.9)
project (Vigil)
include_directories(
build
src
inc
uis
)
######################### Configure OpenCV inclusion #########################
FIND_PATH(CV_INCLUDE_DIR cv.h
/usr/include/opencv
)
MESSAGE(STATUS "OpenCV: CV Path : " ${CV_INCLUDE_DIR})
FIND_PATH(CVAUX_INCLUDE_DIR cvaux.h
/usr/include/opencv
/usr/local/include/opencv
/usr/local/include/opencv/cvaux/include
/usr/local/include/opencv/include
)
MESSAGE(STATUS "OpenCV: CVAux Path : " ${CXCORE_INCLUDE_DIR})
FIND_PATH(CXCORE_INCLUDE_DIR cxcore.h
/usr/include/opencv
/usr/local/include/opencv
/usr/local/include/opencv/cxcore/include
)
MESSAGE(STATUS "OpenCV: CXCore Path : " ${CVAUX_INCLUDE_DIR})
FIND_PATH(HIGHGUI_INCLUDE_DIR highgui.h
/usr/include/opencv
/usr/local/include/opencv/otherlibs/highgui
/opt/local/include/opencv
/usr/local/include/opencv
)
MESSAGE(STATUS "OpenCV: HighGUI Path : " ${HIGHGUI_INCLUDE_DIR})
FIND_LIBRARY(CV_LIB NAMES opencv_imgproc PATHS
/usr/lib
/usr/local/lib
/usr/lib64
/usr/local/lib64
)
MESSAGE(STATUS "OpenCV: CV Lib: " ${CV_LIB})
FIND_LIBRARY(CXCORE_LIB NAMES opencv_core PATHS
/usr/lib
/usr/local/lib
/usr/lib64
)
MESSAGE(STATUS "OpenCV: CXCore Lib: " ${CXCORE_LIB})
FIND_LIBRARY(HIGHGUI_LIB NAMES opencv_highgui PATHS
/usr/lib
/usr/local/lib
/usr/lib64
/usr/local/lib64
)
MESSAGE(STATUS "OpenCV: HighGUI Lib: " ${HIGHGUI_LIB})
INCLUDE_DIRECTORIES(
${HIGHGUI_INCLUDE_DIR}
${OPENCV_INCLUDE_DIR}
${CXCORE_INCLUDE_DIR}
${CVAUX_INCLUDE_DIR}
)
######################### Configure QT inclusion #########################
FIND_PACKAGE(Qt5Widgets)
FIND_PACKAGE(Qt4 REQUIRED)
include_directories(${QT_INCLUDES})
IF(QT4_FOUND)
MESSAGE(STATUS "QT found : YES")
ELSE(QT4_FOUND)
MESSAGE(FATAL_ERROR
"Cannot build without Qt4. Please set Qt4_DIR.")
ENDIF(QT4_FOUND)
######################### Add sources, headers and uis #########################
set(SOURCES ${SOURCES}
main.cpp
VigilWidget.cpp
)
SET(HEADERS ${HEADERS}
VigilWidget.h
)
SET(UI_FILES
bugView.ui
)
######################### Run UIC on .ui files #########################
QT4_WRAP_UI(UI_HDRS ${UI_FILES})
MESSAGE(STATUS "UI_HEADERS: " ${UI_HDRS})
# and finally this will run moc:
#QT4_AUTOMOC(${HEADERS})
QT4_WRAP_CPP(MOC_HEADERS ${HEADERS})
######################### #########################
ADD_EXECUTABLE(Vigil ${UI_HDRS} ${SOURCES} ${HEADERS} ${QtApp_RCC_SRCS} ${MOC_HEADERS})
Meine Quelle und Header-Dateien sind ziemlich leer im Moment, aber ich werde sie auch posten. Wer weiß, vielleicht ist der Fehler da.
main.cpp:
#include <iostream>
#include "VigilWidget.h"
//#include <QApplication>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
std::cout << "Testing";
VigilWidget vigil;
vigil.show();
}
VigilWidget.cpp:
#include "VigilWidget.h"
VigilWidget::VigilWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
VigilWidget.h:
#ifndef _BGSUBTRACT_H_
#define _BGSUBTRACT_H_
#include "ui_bugView.h"
//#include <QObject>
class VigilWidget : public QWidget{
Q_OBJECT
public:
private slots:
signals:
private slots:
private:
Ui::bugView ui;
};
#endif
Sowieso habe ich der beste Teil von zwei Tagen bekommen diese ausgegeben weit und würde wirklich etwas Hilfe schätzen! Danke vielmals!
'FIND_PACKAGE (Qt5Widgets)' Verwenden Sie Qt4 oder Qt5? – Ilya
Ja ... das ist unnötig. Nach dem Entfernen dieser Zeile bekomme ich immer noch das gleiche Problem. –
Nun, ich habe alles auf Paket Qt5 geändert - das sollte OK sein, oder? Es gibt mir jetzt die Fehlermeldung: ** gefunden Paketkonfigurationsdatei: /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake aber es gesetzt Qt5_FOUND auf FALSCH so Paket „QT5“ gilt als nicht gefunden. Grund des Pakets: Das Qt5-Paket erfordert mindestens eine Komponente ** –