2016-03-21 17 views
0

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!

+0

'FIND_PACKAGE (Qt5Widgets)' Verwenden Sie Qt4 oder Qt5? – Ilya

+0

Ja ... das ist unnötig. Nach dem Entfernen dieser Zeile bekomme ich immer noch das gleiche Problem. –

+0

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 ** –

Antwort

1

Config für QT5:

set(QT_VERSION_REQ "5.2") 
find_package(Qt5Core ${QT_VERSION_REQ} REQUIRED) 
find_package(Qt5Quick ${QT_VERSION_REQ} REQUIRED) 
find_package(Qt5Widgets ${QT_VERSION_REQ} REQUIRED) 
set(CMAKE_AUTOMOC ON) 

add_executable(${PROJECT_NAME} ${SOURCES}) 
target_link_libraries(${PROJECT_NAME} 
    Qt5::Core 
    Qt5::Quick 
    Qt5::Widgets  
) 

und eine bessere Nutzung QtQuick statt QWidgets wenn Sie können.

+0

Danke allen! Problem gelöst :) –